一、js运算
(1)一元运算
Number()接受null、[]、’’、false,返回0
接受true,返回 1
1、+
转换为number值
原始值用Number(a)
对象调用valueOf或者toString后,如果能返回原始值,再调用Number()
如果两个方法都不能返回原始值,则会报错
Cannot convert object to primitive value
2、-
转换为nunber值,取负值 -Number(a)
对象调用valueOf或者toString后,如果能返回原始值,再调用Number(),再取负值
如果两个方法都不能返回原始值,则会报错
Cannot convert object to primitive value
3、!、!!、逻辑与、逻辑非
(1)!转化为boolean值
转化为boolean值, 取反 !Boolean(a)
(2)!!、逻辑与、逻辑非
转化为boolean值
falsy有 0 , -0, ‘’, false,null, undefined,-infinity
4、递增、递减操作符
前置、后置操作符
(1)前置,特点是变量的值会在语句求值之前改变。
let age = 30;
++age
//过程等于
age = age + 1;
let sum = ++age + --age;
console.log(sum) // => 31
(2)后置,变量的值在语句求值后改变。
let age = 30,
sum = age++ + age--;
console.log(sum) // => 61
//到age--时,age的值已经改变了
5、关系操作符( > 、<等等)
(1)如果两个值都是字符串,则会进行对位比较。
let str1 = '123456',
str2 = '13';
console.log(str1 < str2) // => true
(2)其他情况,会将两个值转化为number再进行转化,具体步骤见上面内容。
6、相等操作符
由于对比较前要不要强制类型转化有争议,所以ECMA提供了两种比较操作符。
(1)==
比较前需要进行类型转化。
(1)null和undefined不能进行转化
null == undefined
这两个之间相当,和其他值都不相等
(2)NaN参与的比较结果都是false
(3)其余情况,先将两个值转化话number再进行比较。
二、ASCII码和unicode码
ASCII码用来规定如何用二进制数据储存英文字母和符号。
大体规则: 0~9 < A~Z < a~z
unicode码扩大了范围,包含了更多字符
应用: 求字符串总字节数
let str = '123asdfawerafbfey哈哈哈u好玩',
sum = str.length;
let strArr = [...str];
strArr.forEach((item)=>{
if(item.charCodeAt() > 255){
sum++
}
})
console.log(sum)
三、NaN
在js中,如果在本来要返回数值的计算,得到了非数字结果,并不会报错,返回NaN。
NaN参与的计算,结果都是NaN。
所以有isNaN专门判断NaN。
isNaN( param ),会先将param转化为number,如果转化结果为数字,则返回false,反之,返回true。