기본 개념
<code>javascript是一门解释型的语言,浏览器充当解释器。 js执行引擎并不是一行一行的执行,而是一段一段的分析执行。 </code>
지연 스크립트
defer 속성은 HTML4.0.1에 정의되어 있습니다. 그 목적은 스크립트가 실행될 때 페이지 구조에 영향을 미치지 않는다는 것을 나타내는 것입니다. 즉, 실행 전에 전체 페이지가 구문 분석될 때까지 스크립트가 지연됩니다. 따라서 3f1c4e4b6b16bbbd69b2ee476dc4f83a 요소에 defer 속성을 설정하는 것은 브라우저에 즉시 다운로드하고 실행을 지연시키라고 지시하는 것과 같습니다. XHTML 문서에서 defer 속성을 <font face="NSimsun">defer=“defer"</font>
비동기 스크립트
<font face="NSimsun">html5</font>
은 3f1c4e4b6b16bbbd69b2ee476dc4f83a에 대한 비동기 속성을 정의합니다. 전체 속성은 defer 속성과 유사하며 스크립트 처리 동작을 변경하는 데 사용됩니다. 또한 defer와 마찬가지로 async는 외부 스크립트 파일에서만 작동하며 브라우저에 파일을 즉시 다운로드하도록 지시합니다. 그러나 defer와 달리 async로 표시된 스크립트는 지정된 순서대로 실행된다는 보장이 없습니다.
비동기를 지정하는 목적은 페이지가 스크립트 파일이 다운로드되어 실행될 때까지 기다리지 않도록 하여 페이지의 다른 콘텐츠를 비동기적으로 로드하는 것입니다. 따라서 비동기 스크립트는 로딩 중에 DOM을 조작하지 않는 것이 좋습니다
대소문자 구분
ECMASCript의 모든 항목(변수, 함수 이름 및 연산자 포함)은 대소문자를 구분합니다.
1. JScript 변수
변수는 처음 사용될 때 메모리에 설정되므로 나중에 스크립트에서 쉽게 참조할 수 있습니다. 변수를 사용하기 전에 선언하세요. var 키워드를 사용하여 변수를 선언할 수 있습니다.
<font face="NSimsun">var count, amount, level; // 用单个 var 关键字声明的多个声明。</font>
변수 이름 지정
변수 이름에는 전역 변수, 지역 변수, 클래스 변수, 함수 매개 변수 등이 포함되며 모두 이 범주에 속합니다.
변수 이름은 의미 있는 단어와 유형 접두사로 구성되며, 변수와 함수의 가독성을 높이기 위해 카멜 케이스 명명을 사용합니다. 예: sUserName, nCount.
접두사 사양:
각 지역 변수에는 유형에 따라 구분할 수 있는 유형 접두사가 있어야 합니다.
s:表示字符串。例如:sName,sHtml; n:表示数字。例如:nPage,nTotal; b:表示逻辑。例如:bChecked,bHasLogin; a:表示数组。例如:aList,aGroup; r:表示正则表达式。例如:rDomain,rEmail; f:表示函数。例如:fGetHtml,fInit; o:表示以上未涉及到的其他对象,例如:oButton,oDate; g:表示全局变量,例如:gUserName,gLoginTime;
JScript는 대소문자를 구분하는 언어입니다. 유효한 변수 이름을 만들려면 다음 규칙을 따라야 합니다.
첫 번째 문자는 숫자일 수 없습니다.
뒤에는 문자, 숫자, 밑줄이 올 수 있지만 공백은 올 수 없습니다.
변수 이름은 예약어가 아니어야 합니다.
<font face="NSimsun">javascript</font>
은 약한 유형의 언어입니다. <font face="NSimsun">JavaScript</font>
은 추가 공백을 무시합니다. 스크립트를 더 읽기 쉽게 만들기 위해 스크립트에 공백을 추가할 수 있습니다.
<font face="NSimsun">var</font>
은 <font face="NSimsun">javascript</font>
의 예약어로, 다음은 변수 설명임을 나타냅니다. 변수 이름은 사용자가 정의한 식별자이며 변수는 쉼표로 구분됩니다.
변수가 선언되었지만 값이 할당되지 않은 경우 변수는 존재하며 해당 값은 정의되지 않은 Jscript 값입니다.
강제
Jscript에서는 JScript 인터프리터가 예외를 생성하는 것에 대해 걱정하지 않고 다양한 유형의 값에 대한 작업을 수행할 수 있습니다. 대신 JScript 인터프리터는 데이터 형식 중 하나를 다른 데이터 형식으로 자동 변경(캐스트)한 다음 작업을 수행합니다. 예:
运算 结果 数值与字符串相加 将数值强制转换为字符串。 布尔值与字符串相加 将布尔值强制转换为字符串。 数值与布尔值相加 将布尔值强制转换为数值。
要想显式地将字符串转换为整数,使用 <font face="NSimsun">parseInt</font>
方法。要想显式地将字符串转换为数字,使用 <font face="NSimsun">parseFloat</font>
方法。
<font face="NSimsun">JavaScript</font>
变量的生存期:当您在函数内声明了一个变量后,就只能在该函数中访问该变量。当退出该函数后,这个变量会被撤销。这种变量称为本地变量。您可以在不同的函数中使用名称相同的本地变量,这是因为只有声明过变量的函数能够识别其中的每个变量。
如果您在函数之外声明了一个变量,则页面上的所有函数都可以访问该变量。这些变量的生存期从声明它们之后开始,在页面关闭时结束。
js变量思维导图
2.js的数据类型
jscript 有三种->主要数据类型、两种->复合数据类型和两种->特殊数据类型。
主要(基本)数据类型
<code>字符串数值布尔</code>
复合(引用)数据类型
<code>对象数组</code>
特殊数据类型
<code> Null`Undefined`</code>
字符串数据类型:字符串数据类型用来表示 JScript 中的文本。在js中,虽然双引号("")和单引号('')均可表示字符串,而且它们几乎没有任何区别。但只使用双引号("")来表示字符串被认为是最佳的。
一个字符串值是排在一起的一串零或零以上的 Unicode 字符(字母、数字和标点符号)。
什么是Unicode?
Unicode为每个字符都提供了唯一的数值,不管是什么平台、什么程序或什么语言。开发unicode是为了给处理世界上存在的所有字符提供统一的编码。
数值数据类型
我们需要明白一点,JScript 内部将所有的数值表示为浮点值,因此,在 Jscript 中整数和浮点值没有差别。
Boolean数据类型
布尔(逻辑)只能有两个值:true 或 false。
js数组和对象
详情看我这篇文章->javascript学习总结— —数组和对象部分
Null 数据类型:可以通过给一个变量赋 null 值来清除变量的内容。
Jscript中 <font face="NSimsun">typeof</font>
运算符将报告 <font face="NSimsun">null</font>
值为 <font face="NSimsun">Object</font>
类型,而非类型 <font face="NSimsun">null</font>
。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title></title> <script type="text/javascript"> alert(typeof null); </script> </head> <body> </body> </html>
<font face="NSimsun">null</font>
用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
<font face="NSimsun">Undefined</font>
数据类型:
如下情况将返回 undefined 值:
<code>对象属性不存在,声明了变量但从未赋值。</code>
null和undefined的区别
alert(typeof undefined); //output "undefined" alert(typeof null); //output "object" alert(null == undefined); //output "true"
ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。
alert(null === undefined); //output "false" alert(typeof null == typeof undefined); //output "false"
null与undefined的类型是不一样的,所以输出"false"。而===代表绝对等于,在这里null === undefined输出false
另外,这里介绍一种比较重要的数据类型——引用数据类型
引用数据类型
javascript引用数据类型是保存在堆内存中的对象,JavaScript不允许直接访问堆内存空间中的位置和操作堆内存空间,只能通过操作对象在栈内存中的引用地址。所以引用类型的数据,在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存在堆内存中的对象。
下面我们来演示这个引用数据类型赋值过程
自然,给obj2添加name属性,实际上是给堆内存中的对象添加了name属性,obj2和obj1在栈内存中保存的只是堆内存对象的引用地址,虽然也是拷贝了一份,但指向的对象却是同一个。故而改变obj2引起了obj1的改变。
基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。
而引用类型值则是指那些保存在堆内存中的对象,即变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。
简而言之,堆内存存放引用值,栈内存存放固定类型值。
在 <font face="NSimsun">ECMAScript</font>
中,变量可以存在两种类型的值,即原始值和引用值。
原始值存储在栈(<font face="NSimsun">stack</font>
)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。引用值存储在堆(<font face="NSimsun">heap</font>
)中的对象,也就是说,存储在变量处的值是一个指针(<font face="NSimsun">point</font>
),指向存储对象的内存处。
<script type="text/javascript”> var box = new Object(); //创建一个引用类型 var box = "lee"; //基本类型值是字符串 box.age = 23; //基本类型值添加属性很怪异,因为只有对象才可以添加属性。 alert(box.age); //不是引用类型,无法输出; </script>
3.JScript 的运算符
优先级:指运算符的运算顺序,通俗的说就是先计算哪一部分。
结合性:同一优先级运算符的计算顺序,通俗的说就是从哪个方向算起,是左到右还是右到左。
数据类型转换
String() 转换为字符串类型
Number() 转换为数字类型
Boolean() 转换为布尔类型
<font face="NSimsun">parseInt</font>
:将字符串转换为整数。从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:parseInt(“150 hi”)返回的值是:150,parseInt("hi")返回的值是:NaN。
<font face="NSimsun">parseFloat</font>
:将字符串转换为浮点数。 从字符串的开头开始解析,在第一个非整数的位置停止解析,并返回前面读到所有的整数。如果字符串不是以整数开头的,将返回NaN。如:<font face="NSimsun">parseFloat("15.5 hi") 返回的值是:15.5,parseFloat("hi 15.5")返回的值是:NaN。</font>
<code>eval:将字符串作为javascript表达式进行计算,并返回执行结果,如果没有结果则返回undefined。</code>
4.js流程控制
对于js流程控制语句,这里只讲几个比较难懂的。其他不赘述。等下附上一张思维导图。
1.for...in 语句对应于一个对象的每个,或一个数组的每个元素,执行一个或多个语句。
for (variable in [object | array]) statements
参数:
<font face="NSimsun">variable</font>
:必选项。一个变量,它可以是 object 的任一属性或 array 的任一元素。
<font face="NSimsun">object</font>
, <font face="NSimsun">array</font>
:可选项。要在其上遍历的对象或数组。
<font face="NSimsun">statement</font>
:可选项。相对于 object 的每个属性或 array 的每个元素,都要被执行的一个或多个语句。可以是复合语句。
虽然条件控制语句(如if语句)只在执行多条语句的情况下才要求使用代码块(左花括号"{"开头,右花括号"}"结尾),但最佳实践是始终使用代码块。
if(args) alert(args);//容易出错 if(args){ alert(args);//推荐使用 }
js流程控制语句思维导图
5.js函数
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
<font face="NSimsun">Jscript</font>
支持两种函数:一类是语言内部的函数,另一类是自己创建的。
<font face="NSimsun">JavaScript</font>
函数允许没有参数(但包含参数的小括号不能省略),也可以向函数传递参数供函数使用。
更多关于函数的知识请访问我的另一篇文章:javascript学习大总结(四)function函数部分
对象的组成
方法——函数:过程、动态的 属性——变量:状态、静态的
最后,再附上一张前辈总结的思维导图: