表达式类别:
原始表达式
常量、变量和关键字,是表达式的最小单位。
对象和数组的初始化表达式:
[1+2,3+2]数组初始化表达式中还会有子表达式;{x:1,y:1}对象初始化表达式。
函数定义表达式
var a = function(){}
属性访问表达式
expression[expression] expression.identifier两种形式。
这种方式首先会计算[和.之前的expression,如果计算为null和undifined那么就会抛出类型错误异常。
虽然identifier方法较为简单,但是只能使用在合格标识符中,并且要知道具体的属性名称。括号方法必须使用在保留字符或者含有标点符号或者数字中。
调用表达式
a(),里面可以传入参数
对象创建表达式
new a(),假如不传参数也可以不写括号。
运算符:
操作数个数、操作数类型、结果类型、运算符优先级、运算符结合性、运算顺序。
算术表达式:
“+”运算符
在+运算符中,假如其中一个操作数有字符串,则另外一个操作数也会转换成字符串;假如一个操作数是对象,则会根据对象转换成原始值的方式进行转换(日期类型通过toString进行转换,其他通过valueOf进行转换,大部分对象没有valueOf方法,所以会通过toString方法进行转换),假如转换之类的类型是字符串,则会进行字符串相加方法;否则进行数组相加或者NaN。
位运算符
& | ~ ^ << >> >>>
一元运算符
++a a++ --a a--
符号在变量前面则先进行操作符操作再赋值,符号在变量后面先赋值再进行操作符操作。
关系表达式:
等号和不等运算符
== != === !==
==和!=比较的时候会进行一些类型的转换,假如比较的常量是不同类型的,那会先进行类型转换,假如一方是字符串另一方是数字,则会把字符串转换成数字进行比较;假如一方是布尔值一方是数字,则会把布尔值转换成数字进行比较,对象也是一样。最终都转换成数字进行比较,所以这是不严格的等号运算符。
===和!==是严格运算符,它不会进行类型的转换,不同类型那就不相等;两个引用比较要指向同一个对象才想等;两个null或者undifined进行比较不相等;NaN和任何数比较都不相等,和自身比较也不相等;两个字符串比较,16位数完全相等才相等,假如他们长度或者内容不同,则不相等。
原文:http://www.cnblogs.com/claireyu1219/p/6245286.html