js數據類型分爲六大類,原始數據類型(基本數據類型)和引用數據類型es6
//1, 基本數據類型:
var a = 10;
b = a;
a = 20;
console.log(b);
//輸出結果爲10, 由於基本數據類型進行賦值是拷貝賦值,a的值賦給b,是將a的值拷貝一份給b
//2, 引用數據類型:
var a = {
name: "張三"
}
var b = a;
a.name = "李四";
console.log(b.name);
//輸出結果爲 李四 ,由於引用數據類型賦值是進行地址拷貝賦值, a的地址賦給b, b也指向a的地址,二者如今指向的是同一個地址, a的屬性name值改變後,b也會隨之而改變
var a = [1,2,3];
var b = a;
a = [4,5,6];
console.log(b); // [1,2,3]
console.log(a); // [4,5,6]
//分析: a是一個數組,因此是引用數據類型,棧區存儲的是其地址,堆區裏存儲的是值,當b=a的時候,是將a的地址複製給了b,因此此時b與a指向同一地址,當a從新賦值爲[4,5,6]時,
a此時在堆空間裏指向發生改變了,指向的是[4,5,6]了,而b依然是[1,2,3]複製代碼
typeof "你好"; // string
typeof true; // boolean
typeof 10; // number
typeof undefined; // undefined
// 如下三種其實都屬於引用數據類型,對象的子類,可是typeof不能準確的判斷其具體的類型
typeof null // object 是對象,可是不能具體是哪個
typeof Function //function 函數,此時typeof能夠判斷其具體類型
typeof [] // object,數組判斷的是對象
typeof {} // object, 對象判斷的是對象複製代碼
[] instanceof Array; //true
{} instanceof Object //true
console.log((()=>{}) instanceof Function); //true 注: ()=>{} 是es6中的語法,至關於function(){}函數複製代碼
let arr = [];
let obj = {};
arr instanceof Array; // true
arr instanceof Object // true
obj instanceof Object // true複製代碼
由上可見, instanceof也不能準確的判斷對象類型, arr數組由於也是對象的子類型,其原型也是指向對象的,因此判斷其數組爲true 對象也爲true數組
console.log(Object.prototype.toString.call([])); // [object Array]
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call(()=>{})); // [object Function]
console.log(Object.prototype.toString.call("")); // [object String]
console.log(Object.prototype.toString.call(123)); // [object Number]
console.log(Object.prototype.toString.call(true)); // [object Boolean]
console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]複製代碼