【读书笔记】细读《JavaScript权威指南》(三)

第四章: 表达式和运算符

4.1 原始表达式

原始表达式是表达式的最小单位,有常量、直接量、关键字和变量之分。

对象与数组初始化表达式也称对象/数组直接量,但它们不属于原始表达式,因为它们的成员或元素都是子表达式。

4.6 对象创建表达式

当使用new创建对象时,JavaScript首先会创建一个新的空对象,然后把这个对象作为this的值去调用一个指定的函数。

4.7 运算顺序

var a = 1;
var b = a++;
var c = (a++) + a;
var d = (++a) + a;

当一个表达式具有副作用而影响到其他表达式的时候,其求值顺序会发生改变。在上例中,先计算b的值再让a++;
而c的赋值表达式里存在两个a,所以要先让a++,最后计算c,这里注意另一个a并没有自增。

//b = 1;
//c = 5;
//d = 8;

4.8 算术表达式

“+” 运算符

如果其中一个操作数是对象,则调用其valueOf方法,若无则调用toString方法。(Date对象直接调用toString方法)
只要有一个操作数是字符串,加法运算就会转换成字符串拼接操作。否则,两个操作数都会被转换成数字(或NaN),然后进行加法。

1 + {};
true + true;
2 + null;
2 + undefined;
// 1[object Obeject] : {}调用默认的toString方法
// 2
// 2 : null转换成0
// NaN : undefined转换成NaN

4.9 关系表达式

in运算符

二元运算符,判断左操作数(字符串或可被转成字符串)是否为右操作数(对象、数组)的一个属性值。

var point = {x: 1, y: 1};
"x" in point;
"z" in point;
"toString" in point;

var data = [7, 8, 9];
"0" in data;
1 in data;
3 in data;
// true
// false
// true : 对象继承了这个方法
// true
// true : 1转成字符串
// false

instanceof 运算符

双元运算符,左操作数是一个对象,右操作数标识对象的类。若左操作数是右操作数的实例,则表达式返回true。

4.12 表达式计算

动态判断源代码中的字符串是一种强大的语言特性,但几乎没有必要在实际中应用。
JavaScript通过全局函数eval函数解释由JavaScript源码组成的字符串,并产生一个值。如果传入的参数不是字符串,那么这个参数会被直接返回。

4.13 其他运算符

typeof运算符

一元运算符,放在单个操作数前面。返回操作数的类型的一个字符串。注意,字符串都是小写字母。

typeof null;
typeof undefined;
typeof String;
// "object"
// "undefined"
// "function" : ES5规定,所有可执行对象一律返回function

delete运算符

一元运算符,用于删除对象属性或者数组元素。

var o = {x: 1, y: 2};
delete o.x;
'x' in o; 

var data = [1, 2, 3];
delete data[2];
2 in data;
data.length;

var a1 = 1;
delete a1;
a2 = 1;
delete a2;
// true : 表示删除成功
// false : 被删除的属性在目标对象不复存在
// true
// false
// 3 : 数组长度不变,此处打印数组显示: [1, 2, empty]
// false : 用var声明的变量不可删除
// true : 未经var声明的变量是可以删除的,但在chrome下测试删除失败

void运算符

一元运算符,其后的操作数会照常计算,但忽略计算结果并返回undefined

扫描二维码关注公众号,回复: 1896677 查看本文章
var b = 1;
var a = void (b * 2);
console.info(a);
undefined;

猜你喜欢

转载自blog.csdn.net/qq_29977681/article/details/80873260