原始表达式
最简单的表达式是“原始表达式”。
原始表达式是表达式的最小单位,它们不再包含其他表达式。
js中原始表达式包含常量或直接量、关键字和变量。
原始表达式一:直接量
直接量是直接在程序中出现的常数量。
1.23 //数字直接量
"hello" //字符串直接量
/pattern/ // 正则表达式直接量
原始表达式二:保留字
js中一些保留字构成了原始表达式
true //返回一个布尔值true
false //返回一个布尔值false
null //返回一个值:空
this //返回“当前”对象
this并不是一个常量,它在程序的不同地方返回的值也不相同。this关键字经常在面向对象编程中出现。在一个方法体内,this返回调用这个方法的对象。
原始表达式三:变量
i //返回变量i的值
sum // 返回sum的值
undefined //undefined是全局变量,和null不同,它不是一个关键字
对象和数组的初始化表达式
对象和数组初始化表达式实际上是一个新创建的对象和数组。
这些初始化表达式有时称做“对象直接量”和“数组直接量”。
然而和布尔直接量不同,它们不是原始表达式,因为它们所包含的成员或者元素都是子表达式。
数组
数组初始化表达式是通过一对方括号和其内由逗号隔开的列表构成的。初始化的结果是一个新创建的数组。
[] //一个空数组
[1,2,3,4] //拥有4个元素的数组
数组初始化表达式中的元素初始化表达式也可以是数组初始化表达式。
也就是说,这些表达式是可以嵌套的。
var arr = [
[1,2,3],
[4,5,6],
[7,8]
];
js对数组初始化表达式进行求值的时候,数组初始化表达式中的元素表达式也都会各自计算一次。
也就是说,数组初始化表达式每次计算的值有可能是不同的。
数组直接量中的列表逗号之间的元素是可以省略的,这时省略的空位会填充undefined。
var arr = [1,,,,5]; //[1,undefined,undefined,undefined,5];
数组直接量的元素列表结尾处可以留下单个逗号,这时并不会创建一个新的值为undefined的元素。
对象
对象初始化表达式和数组初始化表达式非常类似,只是方括号被花括号代替,并且每个子表达式都包含一个属性名和一个冒号作为前缀
var obj1 = {}; //一个空对象
var obj2 = {x:1,y:2}; // 一个拥有两个属性成员的对象
对象直接量也可以嵌套
var obj = {
obj1:{x:1,y:2},
obj2:{x:3,y:4}
};
js求对象初始化表达式的值的时候,对象表达式也都会各自计算一次,并且它们不必包含常数值:它们可以是任意js表达式。
同样,对象直接量中的属性名称可以是字符串而不是标识符(这在那些只能使用保留字或一些非法标识符作为属性名的地方非常有用)
var aa = 1;
var ss = {
"obj1":{x:123,y:456},
"obj2":{x:1,y:2}
};