语法
1、区分大小写
2、标识符的命名方式:
1):第一个字符必须是一个字母、下划线_或者一个美元符号$;
2) :其他字符可以是字母、下划线、$或者数字(ECMAScript标识符采用驼峰大小写格式),不能把关键字、保留字、true、false、和null用作标识符
3、注释:1)://表示单行注释; 2):/* 表示多行注释*/
4、严格模式:在 ECMAScript 5 中引入的,为js定义了一种不同的解析与执行模型 在文档头部或者函数内部的上方使用 “use strict; ” 编译指示,相当于告诉支持的js引擎切换到严格模式,这会导致ES3中的一些不确定行为得到处理,并且对某些不安全的操作也会抛出错误,在严格模式下,js的执行结果会有很大不同。以下列出支持严格模式的浏览器( IE 10+, Firefox 4+, Safari 5.1+, Opera 12+ 和 Chrome )。
语句
建议分号结尾,减少解析器推测在哪里插入分号,有利于增加代码性能;
多条语句可以写入代码块,类C风格。
关键字和保留字
关键字具有特定用途,如表示控制语句的开始和结束,执行特定的操作符,举栗子:
break do instanceof typeof case else new var catch finally return void continue for switch while function this with default if throw delete in try debugger(es5加入的)
保留字虽然还没有特定的用途,但是也不能用作标识符,再来几个栗子:
es3中有(abstract enum int short boolean export interface static byte super long extends char final native synchronized class float package throws const goto private transient debugger implements protected volatile double public import ),es5新增了let yield,另外es5的严格模式下eval和arguments也不能用作标识符。
以上这些关键字都是不能作为标识符的,不然会导致 Identifier Expected 的报错。
变量
使用 var 操作符来声明的变量为作用域中的局部变量,比如在函数中定义一个变量,在函数退出后,该变量就会被销毁。如果去掉 var 关键字,则相当于定义全局变量,不过在严格模式下会报错 ReferenceError.apply。一条语句也可以定义多个变量,格式如下:
var a = 1,
b = 2,
c = 3;
数据类型
ECMAScript中基本数据类型有以下5种:Undefined Null Booleam Number String
另外有一种复杂数据类型 Object (由一组无序的名值对组成)。另外,在es6中引入了 Symbol 类型,表示独一无二的值。
由于 ECMAScript 是松散类型的,所以需要一种手段来鉴定数据类型:typeof 操作符,使用方法如下(其中括号并非必要):
typeof aa;
typeof 10;
typeof(aa);
*强调内容*typeof 是对尚未声明过的变量能进行的唯一操作,其返回值与声明过但未初始化的变量的返回一致,均为 undefined;
Number类型
属性 | 作用 |
---|---|
Number.MAX_VALUE | (一般为 5e-324)获取宿主环境中对应的最小值; |
Number.MIN_VALUE | (一般为 1.7976931348623157e+308) 获取宿主环境中对应的最小值; |
Number.isFinite() | 判断数值是否在js的数值范围内,在执行极大数值和极小数值时需要判断和监控; |
Number.NEGATIVE_INFINITY | 该属性保存着 -Infinity; |
Number.POSITIVE_INFINITY | 该属性中保存着 Infinity; |
数值转换:
方法 | 作用 | 示例 |
---|---|---|
Number() | 可以用于任何数据 | Number(‘hhh’) => NaN; Number(”) => 0; Number(“00011”) => 11; Number(true) => 1; |
parseInt() | 专门用于将字符串转换成数值 | parseInt(”) => NaN; parseInt(‘d111’) => NaN; parseInt(‘0xA’) => 10; parseInt(“70hhh”) => 70; |
parseFloat() | 专门用于将字符串转换成数值, 始终忽略前导的零,只解析十进制值,没有第二个参数来指定基数, 优先按照可解析为整数的规则返回整数。 | parseFloat(“123ddd”) => 123; parseFloat(“0xA”) => 0; parseFloat(“22.5”) => 22.5; parseFloat(“22.5.5”) => 22.5; parseFloat(“3e-6”) => 0.000003; |
String类型
1、特殊字符字面量
\n 换行
\t 指标
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' '
\" "
\x41 以十六进制表示一个字符,= “A”
\u03a3 以十六进制表示一个Unicode字符,= 希腊字符∑
以上这些特殊字符可以出现在字符串中的任意位置,例如:
"This is sigma: \u03a3"
2、字符串一经创建就不能修改,如果变量需要修它保存的字符串,则需要先销毁原来的字符串,再用包含新值的字符串填充这个变量;
3、除了 null 和 undefined ;其他值都可以用 toString()方法将一个值转换为一个字符串,调用整数值的 toString 方法可以穿一个参数作为数值的基数,默认是按照十进制的格式返回数值的字符串表示。 var x = 2; x.toString(2) => "10";
4、String()函数能将任何类型的值转换为字符串,转换规则是:如果值有 toString() 方法,则返回该方法相应的结果,其他的是 null 和 undefined ,这两个值没有 toString()方法则返回字面量 'null' 和 'undefine';
string.length 返回字符串的长度,如果字符串中包含双字节字符,则 length 属性可能不会精确地返回字符串的字符数目;
Object类型
属性 | 解释 |
---|---|
constructor | 保存用于创建当前对象的函数,例如:var o = new Object() 中的 constructor 就是 Object() |
hasOwnProperty(propertyName) | 检查给定的属性在当前对象中是否存在(不是实例的原型中) |
isPrototypeOf(object): | 用于检查传入的对象是否是另一对象的原型 |
propertyIsEnumerable(propertyName) | 用于检查给定的属性是否可以用 for-in 语句来枚举 |
toLocaleString() | 返回对象与执行环境对应的字符串表示 |
toString() | 返回对象的字符串表示 |
valueOf() | 返回对象的字符串、数值或布尔值表示,通常与 toString() 方法的返回值相同 |
由于在 ECMAScript 中,Object 是所有对象的基础,因此所有对象都具有这些基本的属性和方法。但是 BOM 和 DOM 中的对象属于宿主对象,因为它们是由宿主实现提供和定义的,不一定继承 ECMAScript 定义的 Object 对象,以上这些属性和方法也不一定全具有。
注意事项:
1、Null 本质上是一个空对象的指针,用 typeof 来操作会返回 Object 。
2、Undefined 是由 Null 派生的,所以他们的相等性测试返回 true :null == undefined。
3、ECMAScript 中所有类型的值都与 Boolean 的两个字面量(true false)相等;对于任何数据类型的值,我们都可以用 Boolean()函数来转换为与这两个 Boolean 值等价的值,转换规则如下:
Boolean | true | false |
---|---|---|
String | 任何非空字符串 | “” |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | N/A(不适用) | undefined |
4、保存浮点数需要的内存空间是保存整数的两倍,ECMAScript 有时会将浮点数的树枝转换为整数值,如 1. 和 1.0。另外,如果小数点后面带有6个零以上会自动以e表示法来表示:0.0000003 => 3e-7。
5、由于浮点数值的最高精度为17位小数,所以在算术计算时会出现 0.1 + 0.2 = 0.30000000000000004 这种结果(这是使用基于 IEEE754 数值的浮点计算的通病,并非只有ECMAScript里面有)。
6、如果计算中得到的结果超过了js数值范围,则会这个数值会自动转换为特殊的 Infinity/-Infinity 值,该值将无法参与下一次计算。
7、NaN(Not a Number)是一个特殊的数值,表示本来要返回数值的操作数未返回数值的情况,用于避免报错。比如:任何数除以0时会返回NaN。需要注意的是,涉及NaN的任何操作(NaN/10)都会返回 NaN,还有NaN不等于任何数值,包括 NaN 本身,判断是否是 NaN 需要用 isNaN()函数。当一个变量不能转换为数值的时候,该函数会返回 true ,如 isNaN( ‘hehe’ ) == true; isNaN( NaN ) == true。
8、parseInt(‘o70’)在es3中认为是八进制,结果是56,在es5中认为是十进制,结果是70,此时可以提供第二个参数,来指定基数 8 作为第二个参数,可得到想要的八进制结果,如:parseInt(‘070’, 8);