标识符 即:变量、函数、属性的名字,或者函数的参数。 格式规则:第一个字符必须是一个字母、下划线或一个美元符号;其他字符可以是字母、下划线、美元符号和数字;也可以包含ascii或unicode字母符号,但是不推荐。标识符采用驼峰大小写格式如 firstSecond
注释 单行注释(//)和块级注释(/* */)
严格注释 “use strict”;
语句 语句以分号结尾 ;
关键字、保留字
变量 var message ; 未初始化的变量会保存为一个特殊值 undefined 函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁,在函数外不能访问
数据类型 5种简单数据类型(基本数据类型):Undefined ,Null, Boolean, Number, String .还有复杂数据类型 Object ,本质是无序的名值对
typeof 操作符 由于ECMAScript 为松散类型,因此需要有一种手段来检测给定变量的数据类型 typeof ;使用typeof操作符返回值可能为 ——“undefined”–这个值未定义 ——“boolean”–这个值为布尔值 ——“string”–这个值为字符串 ——“number”–这个值是数字 ——“object”–这个值为对象或null ——“function”–这个值为函数
Undefined 类型 使用var声明变量但未对其加以初始化时,这个变量的值就是undefined 对于未初始化和未声明的变量执行typeof操作符都会返回undefined值
Null类型 null值表示一个空对象指针,所以使用typeof操作符检测null时会返回“object”;null == undefined (true); 无论什么时候,都没有必要把一个变量的值显示地设置为undefined,可是同样的规则对于null不适用:只要保存对象的变量还没有真正的保存对象,就应该明确的让该对象保存null值,可以进一步区分null和undefined
Boolean类型 只有两个字面值 true和false(区分大小写,与数字不是一回事,true不一定等于1,false也不一定等于0) ECMAScript中的所有类型的值都与这两个Boolean值等价的值。可以使用Boolean()转型函数; 对应false : (String)“” ;(Number) 0 和NaN;(Object)null;(Undefined) undefined
Number类型 八进制字面量在严格模式下是无效的; 八进制字面值的第一位必须会0 十六进制字面值的前两位必须是ox 浮点数值 必须含有小数点,且小数点后面必须至少有一个数值 由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机的将浮点数值转换为整数值,如1.0 10. 浮点数值的最高精度是17位小数,但在进行算数计算时其精确度远不如整数,如0.1+0.2 不是0.3,而是0.30000000000004,因此不要测试特定的浮点数值 if(a+b == 0.3){}
将不会得到正确结果 数值范围 Number.MIN_VALUE Number.MAX_VALUE 如果超过该数值会转化为特殊的Infinity值,-Infinity值,即正无穷,负无穷,该值将无法继续参与下一次的计算,因为Infinity 不是能够参与计算的数值,要判断一个数值是不是又穷的,可以使用isFinite() 函数,若参数位于最大与最小数值之间会返回true; NaN 非数值(Not a Number),是一个特殊的值,表示一个本来要返回数值的操作数未返回数值的情况;任何数除以0会返回NaN,但不会影响代码的执行(其他语言会停止代码的执行) NaN 特点:任何实际NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身; isNaN()尝试将接收的值转换为数值,不能被转换为数值的值都会导致这个函数返回true 数值转换 Number()、parseInt()和parseFloat()将非数值转换为数值 Number()可以用于任何数据类型,后两个用于将字符串转换为数值 number()转化规则: 其中true false 转换为1和0;null 返回 0 ; undefined 返回 NaN; 字符串时只包含数字(含浮点格式与十六进格式,但是八进制会被忽略,因为前导的0被忽略了),转换为对应的数值;空字符串转换为0;若含有上述以外的字符,将其转换为NaN; 如果是对象,会调用valueOf()方法,然后按照前面规则转换,如果结果为NaN,则调用toString()方法,再按照前面的规则转换 Number()函数在转换字符串时比较复杂且不合理,因此处理整数更常用parseInt()行数 parseInt()转化规则 忽略空格;如果第一个字符不是数字符号或者负号,返回NaN,即空字符串会返回NaN;如果是数字,会解析完所有后续字符或者遇到一个非数字字符;如“1234blue”会被转换为1234 “22.5”会被转换为22,小数点不是有效的数字字符;并且可以辨别出 十进制 八进制 十六进制 ,超出进制则会返回NaN 如“0xz” 书中结果是ECMAScript 3 认为是56 八进制,ECMAScript 5 认为是0 十进制
但是在浏览器里测试后为 70(parseInt(“070”) ==》 70);因此一定要写上第二个参数(任何时候):进制 parseFloat()转化规则 “22.33.5” ==》22.33 从第一个字符开始解析每个字符,一直解析到字符串的末尾或者解析到遇到一个无效的浮点数字字符为止 字符串中第一个小数点有效,第二个无效,他后面的字符串将被忽略 parseFloat 始终忽略前导的0(即只解析十进制,不存在第二个参数);十六进制的字符串始终被转换成0,
String类型 字符字面量 一些特殊的字符字面量,即转义序列,用于表示非打印字符或其他用途的字符如/n 换行、/t 制表等; 字符串的长度 length属性; 但是如果字符串中含有双字节字符,那么length属性可能不会精确地返回字符串的字符数目 字符串不可变,要改变某个变量保存的字符串,首先销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量 转换为字符串 toString()方法,该方法会返回相应值的字符串表现 数值、布尔值、对象、字符串都有该方法,但是null和undefined没有。 toString()可以传入参数:输出数值的基数,默认为十进制 String()方法,转型函数,能将任何类型的值转换为字符串(过程为如果有toString()方法,则调用该方法,如果值为null,则返回’null’,如果值是undefined,则返回”undefined”) 要把某个值转换为字符串,可以使用加号操作符把他与字符串(“”)加在一起
Object类型 var o = new Object(); 对象:一组数据和功能的集合 Object每个实例都具有下列属性和方法 Constructor :保存的创建当前对象的函数,对上面的例子就是Object( hasOwnPRoperty(propertyName):用于检查给定的属性在当前实例是否存在,入参为字符串 isPrototypeOf(object):用于检查传入对象是否是另一个对象的原型 propertyIsEnumerable(propertyName):用于检查给定属性是否能够使用for-in语句枚举,入参为字符串 toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应 toString():返回对象的字符串表示 valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法返回值相同 但是浏览器的环境对象,如BOM和DOM中的对象,都属于宿主对象,是由宿主实现提供和定义的,可能不会继承Object
操作符 能使用于字符串、数字值、布尔值、甚至对象,应用于对象时,会调用对象的valueOf()或toString()方法,以便取得可以操作的值 一元操作符 有递减和递增操作符:前置和后置型; 前置时变量的值在语句求值以前改变的,前置操作和执行语句的优先级相等,整个语句会从左至右被求值;后置时变量的值在语句求值以后才改变; 应用于字符串时,google测试结果为必须是全部是有效数字字符的字符串,才会转换为数字,否则为NaN 一元加和减操作符 一元加操作符放在数值前面,对数值不会产生任何影响,不过对非数值应用一元加操作符时,该操作符会像Number()一样对该值转换 一元减操作符应用于数值时,该值会变成负值;应用于非数值时,规则如一元加操作符,最后将得到的数值转换为负数 位操作符 按照内存中的位来操作数值,ECMAScript中数值 都是以64位格式存储,但位操作符并不直接操作64位的值,而是先将64位的值转换为32位的整数,然后执行操作,最后将结果转换回64位 有符号的整数:前31位表示整数的值,第32位表示数值的负号,0为正数,1为负数 负数为二进制补码:步奏如下: 求这个值绝对值的二进制码;求二进制的反码,0—>1;得到的二进制反码加1 但是ECMAScript会隐藏这些信息,我们调用toString(2)时,返回的是这个负数绝对值的二进制码前面加上了一个负号 对NaN和Infinity 应用位操作时,会被当成0处理;对于非数值应用位操作符时,会先使用Number()将其转换为一个数值,在应用位操作 按位非(NOT) 符号:~;本质:操作数的负号减1;由于按位非是数值的最底层操作,速度更快 按位与(AND) 符号:&; 本质:两个数值的每一位对其,相同位置上的两个数执行AND操作;都是1才是1 按位或(OR) 符号:|;都是0才是0 按位异或(XOR) 符号:^ 两个数值的对应位上只有一个1才返回1, 左移 符号:<< 空位补0;左移不会影响符号位 有符号的右移 符号:>> 空位补0;右移不会影响符号位 无符号右移 符号:>>> 对正数来说,与有符号的右移结果相同; 对负数来说,影响较大
布尔操作符 有三个:非(NOT)、与(AND)、或(OR) 逻辑非 符号:!;规则为 对象=>false;空字符串=>true;非空字符串=>false;0=>true;非0数值=>false;null、NaN、undefined=>true; !!(valueBoolean) 与Boolean()方法一致 逻辑与 符号:&& 逻辑与操作可以用于任何类型的操作数。在有一个操作符不是布尔值的时候,逻辑与操作就不一定返回布尔值;规则如下: 第一个操作数是对象,返回第二个操作数; 第二个是对象,只有在第一个操作数的求值结果为true才能返回该对象 两个都是对象,返回第二个操作数 第一个为null、NaN、undefined时,返回第一个
为短路操作,第一个能决定结果时,不会对第二个操作数求值;不能再逻辑与操作中使用未定义的值 逻辑或 符号:|| 求值规则: 如果第一个操作数是对象,返回第一个操作数 第一个操作数求值结果为false,返回第二个操作数 如果两个都是对象,返回第一个操作数 如果两个都是null,或NaN或undefined,则返回null或NaN或undefined
也是短路操作,因此var myObject = preferredObject || backupObject; 有一个默认值:backupObject;
乘性操作符 有乘法、除法和求模;如果参与乘法计算的某个操作符不是数值,会先使用Number()转型函数将其转换为数值 乘法 符号:* 规则如下: 都是数值,执行常规乘法计算:两个正数或负数相乘还是正数,只有一个有符号,结果就是负数,超出ECMAScript数值范围,返回Infinity 或-Infinity 如果一个是NaN,结果为NaN;如果Infinity与0相乘,结果是NaN;Infinity与非0相乘,结果为Infinity或-Infinity,取决于有符号操作数的符号; infinity与infinity相乘,结果是infinity;如果有一个操作数不是数值,则后台调用Number()将其转换为数值 除法 符号:/ 规则如下: 都是数值,执行常规除法计算:两个正数或负数相乘还是正数,只有一个有符号,结果就是负数,超出ECMAScript数值范围,返回Infinity 或-Infinity 如果一个是NaN,结果为NaN; infinity与infinity相除,结果是NaN;0/0 结果是NaN;如果非0的有限数被0除,结果是Infinity或-Infinity,取决有符号操作数的符号;如果是Infinity被任何非零除,则结果为Infinity或-Infinity,取决于有符号操作数的符号 如果有一个操作数不是数值,则后台调用Number()将其转换为数值 求模 符号:% ;求余 规则如下: 被除数是无穷大而除数是有限大的数值,则结果是NaN; 被除数是有限大而除数是0,结果是NaN; Infinity除以Infinity,结果是NaN; 被除数是有限大数值而除数是无穷大的数值,结果为被除数 被除数为0,结果为0;除数为0,结果为NaN 如果有一个操作数不是数值,则后台调用Number()将其转换为数值,然后应用上面的规则
加行操作符 加法 规则如下:
如果都是数值,执行常规的加法计算,然后由下列规则返回结果 如果一个为NaN,结果为NaN;如果Infinity加Infinity,则为Infinity;如果-Infinity加-Infinity,则为-Infinity;如果是Infinity加-Infinity,则为NaN; 如果+0加+0,结果为+0;如果-0加-0,结果为-0;如果+0加-0,结果为+0;如果有一个操作数是字符串,规则如下: 都是字符串,拼接起来即可只有一个是字符串,另一个转换为字符串,拼接起来如果有一个是对象、数值或布尔值,则调用他们的toString()方法取得相应的字符串值,再应用前面的字符串规则。对于undefined和null,则分别调用String()函数并取得字符串“undefined”和“null” 减法 符号:- 规则如下: 操作符都是数值,执行常规算术减法操作返回结果一个为NaN,结果为NaNInfinity减Infinity,结果为NaN-Infinity减-Infinity,结果为NaNInfinity减-Infinity,结果为Infinity-Infinity减Infinity,结果为-Infinity+0减+0 结果+0;+0减-0,结果-0;-0减-0,结果+0如果一个为字符串、布尔值、null或undefined,先在后台调用Number()转换为数值,在执行前面的规则如果一个操作数是对象,调用valueOf()以取得表示该对象的数值,如果得到NaN,则结果为NaN,没有valueOf()方法,则调用toString()方法并将得到的字符串转换为数值关系操作符 < > <= >= 规则如下
两个操作数都是数值,执行数值比较两个操作数都是字符串,比较两个字符串对应的字符编码值一个为数值,将另一个转为数值,再执行比较一个为对象,调用valueOf()方法,再按照前面的规则执行比较,如果没有valueOf()方法, 则调用toString()方法,并执行前面比较一个为布尔值,转换为数值,在执行比较 “23”< 3 false; “23”<”3” true; “a” < 3 false; a 被转化为NaN,任何数与NaN进行比较,结果都是false;相等操作符 相等和不相等——先转换再比较;全等和不全等——仅比较而不转换 相等和不相等 符号: == 和 != 先转换操作数,在比较相等性;规则如下:
有一个是布尔值,比较之前先转换为数值,false转换为0,true转换为1如果一个为字符串,一个为数值,比较前先将字符串转换为数值一个为对象,一个不是,先将对象调用valueOf()方法,在按照前面规则进行null和undefined是相等的比较之前,不能将null和undefined转换成其他任何值一个操作数为NaN,相等操作符返回false,不相等,返回true;NaN == NaN fasle都为对象,比较是否是同一对象,只想同一对象,返回true,否则为false全等和不全等 符号 === 和!== 规则:
比较之前不转换操作数null === undefined false 不是一个类型条件操作符 即三木运算符 var variable = boolean_expression ? true_value :false_value;
赋值运算符 符号有: = 右侧的值赋给左侧的变量;复合赋值 ,等号前面添加 乘性操作符、加性操作符、位操作符
逗号运算符 在一条语句中执行多个操作如 var num1 = 1,num2=2,num3=3; 上面是声明多个变量,除此之外逗号操作符还可以用于赋值,逗号操作符总会返回表达式的最后一项var num = (1,2,3,4,5)// num的值为5,最后一项
新闻热点
疑难解答