上接语言基础:JavaScript高级程序设计基础(三)
2.3.8 Object类型
let obj=new Object()
- hasOwnProperty(propertyName) :判断当前对象实例(不是原型)上是否存在给定的属 性。要检查的属性名必须是字符串(如 o.hasOwnProperty("name") )或符号
- isPrototypeOf( object ):用于判断当前对象是否为另一个对象的原型。
- toString() :返回对象的字符串表示
- valueOf() :返回对象对应的字符串、数值或布尔值表示。通常与 toString() 的返回值相同。
2.4 操作符
2.4.1 一元操作符
1. 譬如a++,++a等,使用方法不作过多赘述,这里讲一下遵循的规则
- 对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
- 对于字符串,如果不是有效的数值形式,则将变量的值设置为 NaN 。变量类型从字符串变成
- 数值。
- 对于布尔值,如果是 false,则转换为 0 再应用改变。变量类型从布尔值变成数值。
- 对于布尔值,如果是 true,则转换为 1 再应用改变。变量类型从布尔值变成数值。
- 对于浮点值,加 1 或减 1。
- 如果是对象,则调用其valueOf()方法取得可以操作的值。对得到的
- 值应用上述规则。如果是 NaN,则调用 toString()并再次应用其他规则。变量类型从对象变成
- 数值。
//这里用对象进行举例
let o={valueOf(){return -1;}
}
o++ //0
2.一元加和减
+num可以将非数值类型转换为数值;-num把数值/非数值转换为符号相反的数(正数转换为负数,负数转换为正数)。一元加和减的非数值转换规则和上述一样
2.4.2 位操作符
~:按位非,按位去反
&:按位与,只有都是1才取1
|:按位非,有1就是1
^:按位异或,相同的就是1
<<:左移,>>:右移(左右移会保留符号位,无符号左移:<<<)
2.4.3 布尔操作符
逻辑非与或不做过多解释,这里讲一下特殊的点
!!:相当于调用Boolean()
console.log(!!"blue"); // true
当进行逻辑与、或时如果第一个判断条件已经可以得出结果,那么将不会进行第二个判断条件:即便第二个判断条件会报错,但只要第一个判断条件能得出结果,整个判断语句就不会报错。
2.4.4 乘性操作符
- 乘除基本用法将不赘述,以下是注意点
- 如果是 Infinity 乘以 0,则返回 NaN
- 如果是 Infinity 除以 Infinity,则返回 NaN
- 如果是 0 除以 0,则返回 NaN
- 如果是非 0 的有限值除以 0,则根据第一个操作数的符号返回 Infinity 或-Infinity
- 非常规的模算法都将返回NaN(除了被除数是有限值,除数是无限值,将返回被除数)
- 如果有不是数值的操作数,则先在后台用 Number()将其转换为数值
2.4.5指数操作符
当指数小于1时则为开根
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
指数操作符也有自己的指数赋值操作符**=
let squared = 3;
squared **= 2;
console.log(squared); // 9
2.4.6 加性操作符
1. 加法操作符
let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is " + num1 + num2;
console.log(message); // "The sum of 5 and 10 is 510"
let message = "The sum of 5 and 10 is " + (num1 + num2);
console.log(message); // "The sum of 5 and 10 is 15"
2. 减法操作符
2.4.7 关系操作符
操作符包含>,<,>=,<=,用法不过多赘述。需要注意的是当不是数值的进行比较会先将其转化为数值,而字符串则会逐个比较字符串中对应字符的编码(并非根据首字母大小,而是根据字母本身的编码数值)
2.4.8 相等操作符
1. 等于和不等于
- 一般情况不作过多赘述。注意的是
- null 和 undefined 相等
- 至少有一个操作数是N即使两个操作数都是 NaN,相等操作符也返回 false
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true
2. 全等和不全等(建议使用)
全等和不全等操作符与相等和不相等操作符类似,只不过它们在比较相等时不转换操作数。
同时null === undefined 是false,因为它们不是相同的数据类型。
2.4.9 条件操作符
即expression?A:B,此处不作过多解释
2.4.10 赋值操作符
类似于+=,>>=,<<=等,不做过多介绍
2.4.11逗号操作符
逗号操作符可以用来在一条语句中执行多个操作,如下所示:
let num1 = 1, num2 = 2, num3 = 3;