JS数据类型
# 有哪些数据类型
JavaScript 中共有七种内置数据类型,包括 基本类型
和 对象类型
。
# 基本类型
string(字符串)
boolean(布尔值)
number(数字)
symbol(符号)
null(空值)
undefined(未定义)
注意:
string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类型;
symbol是ES6中新增的数据类型,symbol 表示独一无二的值,通过 Symbol 函数调用生成,由于生成的 symbol 值为原始类型,所以 Symbol 函数不能使用 new 调用;
null 和 undefined 通常被认为是特殊值,这两种类型的值唯一,就是其本身。
# 对象类型
对象类型也叫引用类型
,array和function是对象的子类型。对象在逻辑上是属性的无序集合,是存放各种值的容器。对象值存储的是引用地址,所以和基本类型值不可变的特性不同,对象值是可变的。
# 类型转换的场景
# 1. 什么时候自动转换为string类型
- 在没有对象的前提下
字符串的自动转换,主要发生在字符串的加法运算时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。
'2' + 1 // '21'
'2' + true // "2true"
'2' + false // "2false"
'2' + undefined // "2undefined"
'2' + null // "2null"
1
2
3
4
5
2
3
4
5
- 当有对象且与对象+时候
//toString的对象
var obj2 = {
toString:function(){
return 'a'
}
}
console.log('2'+obj2)
//输出结果2a
//常规对象
var obj1 = {
a:1,
b:2
}
console.log('2'+obj1);
//输出结果 2[object Object]
//几种特殊对象
'2' + {} // "2[object Object]"
'2' + [] // "2"
'2' + function (){} // "2function (){}"
'2' + ['koala',1] // 2koala,1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 2. 什么时候自动转换为Number类型
- 有加法运算符,但是无String类型的时候,都会优先转换为Number类型
true + 0 // 1
true + true // 2
true + false //1
1
2
3
2
3
- 除了加法运算符,其他运算符都会把运算自动转成数值。
+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0
1
2
3
4
2
3
4
注意
注意:null转为数值时为0,而undefined转为数值时为NaN。
判断等号也放在Number里面特殊说明 == 抽象相等比较与+运算符不同,不再是String优先,而是Number优先。
- 均为number,直接比较
- 如果存在对象,ToPrimitive()type为number进行转换,再进行后面比较
- 存在boolean,按照ToNumber将boolean转换为1或者0,再进行后面比较
- 如果x为string,y为number,x转成number进行比较
# 参考文章链接
经常被面试官问道的JavaScript数据类型知识你真的懂吗? (opens new window)
详解 (opens new window)