表达式
表达式是一组代码的集合,它返回一个值。——《JavaScript 权威指南》
JavaScript 有以下表达式类型(摘自 《JavaScript 权威指南》):
- 算数: 得出一个数字, 例如 3.14159. (通常使用
arithmetic operators.) - 字符串: 得出一个字符串, 例如, “Fred” 或 “234”. (通常使用
string operators.) - 逻辑值: 得出 true 或者 false. (经常涉及到
logical operators.) - 基本表达式: JavaScript 中基本的关键字和一般表达式。
- 左值表达式: 分配给左值。
原始表达式
原始表达式是最简单的表达式,是表达式的最小单位,不再包含其他表达式。
JavaScript 的原始表达式包含常量或直接量、关键字和变量。
示例
(1) 常量、直接量 3.14, "test"
(2) 关键字 true、false、null、this
(3) 变量 i, j, k, undefined
//undefined 是全局变量,和 null 不同,它不是一个关键字
原始表达式和原始表达式之间可以复合成复合表达式。

初始化表达式
对象、数组初始化表达式实际上是一个新创建的对象或数组,这些初始化表达式有时称作 “对象直接量” 或“数组直接量”,然而和布尔直接量不同,它们不是原始表达式,因为它们包含的成员和元素都是子表达式。
示例
var i = [1, 2] 等价于 var i = new Array(1, 2);
var j = [1, , , 4] 表示 [1, undefined, undefined , 4]
var k = {x : 1, y : 2} 等价于 var o = new Object(); o.x = 1; o.y = 2;
函数表达式
函数表达式非常类似于 函数声明,并且两者拥有几乎相同的语法。函数表达式与函数声明的最主要区别是 函数名称,在函数表达式中可省略它,从而创建匿名函数。一个函数表达式可以被用作一个 IIFE(Immediately Invoked Function Expression,即时调用的函数表达式),它一旦定义就运行。
示例
// 函数表达式
var f = function(){};
// 即时调用的函数表达式
(function () {
console.log('hello world');
})();
属性访问表达式
示例
var o = {x : 1};
// 属性访问表达式
o.x
o['x']
调用表达式
func();
对象创建表达式
new Func(1, 2);
new Object;
运算符

运算符 ? :
c ? a : b
var val = true ? 1 : 2; // val = 1
运算符 ,
a, b
var val = (1, 2, 3); // val = 3
运算符 delete
delete obj.x;
var obj = {
x: 1
};
obj.x; // 1
delete obj.x;
obj.x; // undefined
var obj = {};
Object.defineProperty(obj, 'x', {
configurable: false,
value: 1
});
delete obj.x; // false
obj.x; // 1
运算符 in
window.x = 1;
'x' in window; // true
运算符 instanceof, typeof
{} instanceof Object // true
typeof 100 === 'number' // true
运算符 new
function Foo() {}
Foo.prototype.x = 1;
var obj = new Foo();
obj.x; // 1
obj.hasOwnProperty('x'); // false
obj.__proto__.hasOwnProperty('x'); // true
运算符 this
this; // window (浏览器)
var obj = {
func: function () {
return this;
}
};
obj.func(); // obj
运算符 void
void 0 // undefined
void(0) // undefined