javascript 类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型、普通对象类型、自定义对象类型。
标准类型共包括了6个分别是:
原始类型(值类型):
undefined
null
true
'hello'
123
引用类型(对象类型):
var obj = {};
<!-- 原始类型变量的包装类型如下 -->
var bool = new Boolean(true);
var str = new String("hello");
var num = new Number(1);
var obj0 = new Object();
原始类型和引用类型的区别:
原始类型储存在栈(Stack)中储存变量的值,而引用类型在栈中保存的是所引用内容储存在堆(Heap)中的值。类似于指针的概念,引用类型并非储存变量真实数值而是地址,所以对已引用类型的复制其实只是复制了相同的地址而非实际的变量值。
Undefined 值:undefined 出现场景:
var obj;
var obj = {x: 0}; obj.y;
function f(){}; var obj = f();
function f(i){console.log(i)}; f();
void(expression)
Null 值:null 出现场景:
document.getElementById('not-exist-element')
Boolean 值:true, false 出现场景:
if(隐式转换){}
var bool = true;
String 值:字符串 出现场景:
var str = 'Hello, world!';
Number 值:整型直接量,八进制直接量(0-),十六进制直接量(0x-),浮点型直接量 出现场景:
1026
3.14
1.2e5
0x10
Object 值:属性集合 出现场景:
var obj = {name: 'Xinyang'};
Value | Boolean | Number | String |
---|---|---|---|
undefined | false | NaN | "undefined" |
null | false | 0 | "null" |
true | true | 1 | "true" |
false | false | 0 | "false" |
'' | false | 0 | '' |
'123' | true | 123 | '123' |
'1a' | true | NaN | '1a' |
0 | false | 0 | "0" |
1 | true | 1 | "1" |
Infinity | true | Infinity | "Infinity" |
NaN | false | NaN | 'NaN' |
{} | true | NaN | "[object Object]" |
typeof
Object.prototype.toString
constructor
instanceof
typeof:
Object.prototype.toString:
constructor:
function getConstructiorName(obj) {
return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
}
getConstructiorName([]) === "Array"; // true
instanceof: