所有内容均不是原创,单纯之前学习时做的笔记。内容结合了非常多的文章视频,已经记不清参考的哪里的了,所以就没有加参考说明了。
数据类型
- 有7种基本数据类型,也称为原始类型
number用于任何类型的数字:整数或浮点数,在±(253 - 1) 范围内的整数。bigint用于任意长度的整数,如:2n。string用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。boolean用于true和false。null用于未知的值 —— 只有一个null值的独立类型。undefined用于未定义的值 —— 只有一个undefined值的独立类型。symbol用于唯一的标识符。
- 复杂数据类型:
object用于更复杂的数据结构。
类型判断
- typeof:原始数据类型中除了
null,其它类型都可以通过typeof来判断,因为typeof null会返回"object"。对于对象类型来说,typeof只能具体判断函数的类型为function,其它均为object。对typeof x的调用会以字符串的形式返回数据类型。 - instanceof:
instanceof内部通过原型链的方式来判断是否为构建函数的实例,常用于判断具体的对象类型。 - Object.prototype.toString:
Object.prototype.toString综合来看是最佳选择,能判断的类型最完整。 - isArray、isNaN
-
typeof true // 'boolean' var str1 = new String('hello world') str1 instanceof String // true var toString = Object.prototype.toString; toString.call(new Date); // [object Date] toString.call(new String); // [object String]
类型转换
-
转布尔值规则:
undefined、null、false、NaN、''、0、-0都转为false。- 其他所有值都转为
true,包括所有对象。
-
转数字规则:
true为 1,false为 0null为 0,undefined为NaN,symbol报错- 字符串看内容,如果是数字或者进制值就正常转,否则就
NaN
-
对象转基本类型:
- 调用
Symbol.toPrimitive,转成功就结束 - 调用
valueOf,转成功就结束 - 调用
toString,转成功就结束 - 报错
- 调用
-
四则运算符:
- 只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型
- 其他运算只要其中一方是数字,那么另一方就转为数字
-
比较运算符
-
相等和不相等——先转换再比较 (
==)-
首先会判断两者类型是否相同。相同的话就是比大小了
-
类型不相同的话,那么就会进行类型转换
-
会先判断是否在对比
null和undefined,是的话就会返回true -
null不等于任何值除了null和undefined,undefined同理 -
判断两者类型是否为
string和number,是的话就会将字符串转换为number1 == '1' ↓ 1 == 1 -
判断其中一方是否为
boolean,是的话就会把boolean转为number再进行判断'1' == true ↓ '1' == 1 ↓ 1 == 1 -
判断其中一方是否为object且另一方为string、number或者symbol,是的话就会把object转为原始类型再进行判断
'1' == { name: 'yck' } ↓ '1' == '[object Object]'
-
- !可将变量转换成boolean类型
+ 'b'等于NaN,这里的+是一元正号
-
- 总结
-
比较运算符始终返回布尔值。
-
字符串的比较,会按照“词典”顺序逐字符地比较大小。
-
当对不同类型的值进行比较时,它们会先被转化为数字(不包括严格相等检查)再进行比较。
-
在非严格相等
==下,null和undefined相等且各自不等于任何其他的值。 -
在使用
>或<进行比较时,需要注意变量可能为null/undefined的情况。比较好的方法是单独检查变量是否等于null/undefined。
-