JavaScript表达式分为原始表达式和复杂表达式
原始表达式
原始表达式是表达式的最小单位,所以它不再包含其他表达式。原始表达式包括this关键字、标识符引用、字面量引用、数值初始化、对象初始化和分组表达式。
this关键字
this // 返回当前对象
标识符
bar; // 返回变量bar的值
字面量
null; // null
undefined; // undefined
true; // Boolean
false; // Boolean
'good'; // String
1; // Number
/pattern/ // RegExp
数组和对象初始化
[];
['a', 'b', 'c'];
{};
{name: 'wmui'};
分组表达式
分组表达式就是括号
(10 + 2) / 2
复杂表达式
复杂表达式由原始表达式和操作符组合而成,复杂表达式包括属性访问表达式、对象创建表达式、函数表达式
属性访问
属性访问表达式可以获取对象的属性值或数组中的值,属性访问有两种方法:第一种是在表达式后面使用.
标识符;第二种是使用[]
方括号,括号内可以是一个表达式。对于数组而言只能使用方括号访问,括号内是元素的索引。
var people = {name: 'wmui', sex: 'boy'}
people.name; // 获取表达式people的name属性
var bar = 'sex';
people[bar]; // 获取表达式people的sex属性
var a = ['a', 'b', 'c'];
a[0]; // 获取表达式a中索引为0的元素
无论使用哪种表达式获取属性值,都会先计算表达式再获取表达式的属性值,如果计算结果为null
或undefined
,表达式会抛出类型错误,因为这两个值不能包含任何属性。
var bar;
bar.name; // Cannot read property 'name' of undefined
如果计算结果不是对象,JavaScript会将它转换为对象
'wmui'.name; // undefined
Object('wmui').name; // undefined
如果对象表达式后紧跟着者方括号,则会将方括号内的表达式转化为字符串
var people = {name: 'wmui', sex: 'boy'};
var n = 'name';
people[n]; // wmui
people['name'] // wmui
不论哪种情况,如果命名的属性不存在,那么整个属性访问表达式的值就是undefined
对象创建
new Object();
new Object;
如果对象创建表达式不需要传入参数给构造函数,那么后面的圆括号可以省略
函数表达式
函数表达式分为函数定义表达式和函数调用表达式
函数定义表达式:定义一个函数,表达式的值就是就是这个函数
// 函数表达式
function foo(num) {
return num * 2
}
// 函数语句
var foo2 = function(num) {
return num * 2
}
函数调用表达式:一种调用函数或方法的语法表示
foo(3);
foo2(3);
arr.sort();