数据类型分类
参考
- JavaScript data types and data structures
- 一些其它的网站。。。
原始数据类型(Primitive)
原始类型有七种 五种,分别是:
- String
- Number
- Boolean
- undefined
- null
- BigInt
- Symbol
引用数据类型(Reference)
- Object
- Map
- Set
- Array
- Function
- ...
判断数据类型
typeof
- typeof('1') === 'string'
- typeof(1) === 'number'
- typeof(true) === 'boolean'
- typeof(undefined) === 'undefined'
- typeof(Symbol) === 'symbol 引用类型与null tyoeof()结果都是object
instanceof 判断引用类型
- Object
- Array
- Map
- Set
- Function
constructor 判断
可以判断class 实例化的对象 例如
var e = new Event('ss')
undefined
e.constructor
ƒ Event() { [native code] }
数据类型的转换
原始类型的转换
Number <==> String
-
parseInt('1')
-
parseFloat('1')
-
'1' * 1
-
'1' - 0
-
Number('1')
-
1 + ''
-
String(1)
转换Boolean
- !data 取非
- !!data 转换成Boolean
- Boolean(data)
Boolean => Number
- Number(true) = 1
- Number(false) = 0
+ - * /时的类型转换
- '+'
- 当有字符串时,所有转换成字符串;
- 当没有字符串时,所有转换成数字计算;
- '-'/''/''
- 一律尝试转换成数字计算;
引用类型的toString vs valueOf
当引用类型同时实现了toString / valueOf 方法时,直接使用对象,javascript 会尝试根据代码的用途来判断是使用哪种方法
var Parent = function(name,age){
this.name = name;
this.age = age;
}
Parent.prototype = {
toString: function(){
return this.name;
},
valueOf: function(){
return this.age;
}
}
let pp = new Parent('sfg',32)
'a'.concat(pp)
// "asfg"
pp + 1
// 33
此处需要注意的是 '123' + pp //'12332' 因为是 + 所以会使用valueOf方法,但马上会被转成字符串进行计算;