javascript 類型系統(tǒng)可以分為標(biāo)準(zhǔn)類型和對象類型,進(jìn)一步標(biāo)準(zhǔn)類型又可以分為原始類型和引用類型,而對象類型又可以分為內(nèi)置對象類型、普通對象類型、自定義對象類型。
http://wiki.jikexueyuan.com/project/fend_note/images/J/javascript-variable-type.jpg" alt="" />
標(biāo)準(zhǔn)類型共包括了6個分別是:
原始類型(值類型):
undefinednulltrue'hello'123引用類型(對象類型):
var obj = {};
<!-- 原始類型變量的包裝類型如下 -->
var bool = new Boolean(true);
var str = new String("hello");
var num = new Number(1);
var obj0 = new Object();
原始類型和引用類型的區(qū)別:
原始類型儲存在棧(Stack)中儲存變量的值,而引用類型在棧中保存的是所引用內(nèi)容儲存在堆(Heap)中的值。類似于指針的概念,引用類型并非儲存變量真實數(shù)值而是地址,所以對已引用類型的復(fù)制其實只是復(fù)制了相同的地址而非實際的變量值。
Undefined 值:undefined 出現(xiàn)場景:
var obj;var obj = {x: 0}; obj.y;function f(){}; var obj = f();function f(i){console.log(i)}; f();void(expression)Null 值:null 出現(xiàn)場景:
document.getElementById('not-exist-element')Boolean 值:true, false 出現(xiàn)場景:
if(隱式轉(zhuǎn)換){}var bool = true;String 值:字符串 出現(xiàn)場景:
var str = 'Hello, world!';Number 值:整型直接量,八進(jìn)制直接量(0-),十六進(jìn)制直接量(0x-),浮點型直接量 出現(xiàn)場景:
10263.141.2e50x10Object 值:屬性集合 出現(xiàn)場景:
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]" |
typeofObject.prototype.toStringconstructorinstanceoftypeof:
Object.prototype.toString:
constructor:
function getConstructiorName(obj) {
return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
}
getConstructiorName([]) === "Array"; // true
instanceof: