JS基础-JavaScript表达式

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的元素

无论使用哪种表达式获取属性值,都会先计算表达式再获取表达式的属性值,如果计算结果为nullundefined,表达式会抛出类型错误,因为这两个值不能包含任何属性。

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();