原型模式故事鏈(3)--JS的數據類型、以及區別、區分、轉化

上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11...javascript

在上一章講解原型鏈時提到了:全部的引用類型都有一個_proto_屬性,稱之爲隱式原型。
那麼引用類型是什麼鬼?java


儘可能簡單的講解一下javascript中的數據類型:
在JS中有兩大數據類型:
1.基本數據類型,也稱爲值類型
2.複雜數據類型,也成爲引用類型segmentfault

值類型:Number、String、Boolean、Null、Undefined
引用類型:Object、Array、Function數組

因此JS一共有8種數據類型函數

那麼爲何要區分爲值類型和引用類型呢?它們有什麼不一樣之處
客官且看:
值類型是值的「複製」,以值類型中的Number類型爲例。大數據

var num = 100;
    var num2 = num;
        num = 200;
    console.log(num2);//100
    console.log(num);//200

在上述代碼中,第2行就是把num的值100複製給num2,num2的值就爲100了。在第3行num的值再變化爲200時與num2已經不要緊了。code

引用類型是值「傳遞」,以引用類型中的Object類型爲例。ip

//例1:
    var obj = {a:100};
    var obj2 = obj;
    obj.a = 200;
    console.log(obj2.a);//{a:200}
    console.log(obj.a);//{a:200}

    //例2:
    var arr = [1,2];
    var arr2 = arr;
    arr2[0] = 3;
    console.log(arr);//[3,2]
    console.log(arr2);//[3,2]

在上述代碼中,例1第2行代碼中,把obj的值傳遞給obj2,在這裏obj2只是obj的一個別名!內存

什麼意思呢?就是說你叫作小明,你媽媽叫你狗蛋,狗蛋就是你的別名。因此不論你媽媽是喊,狗蛋回家吃飯了,仍是喊小明回家吃飯了,其實喊的都是你。全部obj和obj2實際上是指向同一內存地址的,他們就是同一個東西,當其中一個變了,另外一個固然也隨着變化。原型鏈

從例1和例2中能夠看出obj變化了會對obj2影響,arr2變化了arr也變化了。固然的嘛!狗蛋買了件新衣服,小明固然就有這件新衣服了。。。


如何判斷一個變量是什麼數據類型呢?
typeof()能夠查看值類型全部數據類型,能區分出引用類型的Function,可是對於引用類型的Object和Array酒不能區分,都會顯示爲Object.
null是個特殊的東西,會顯示爲object,有興趣的能夠去看看,這裏很少說。

那怎麼區分出數組呢?答案是:instanceof
如:a instanceof Array 只有當a是數組時纔會是true.

var a = 5;
    var b = 'abc';
    var c = null;
    var d = undefined;

    console.log(typeof(a))//number
    console.log(typeof(b))//string
    console.log(typeof(c))//object
    console.log(typeof(d))//undefined


    var obj = {a:1}
    var arr = [1,2]
    var fn = function(){
        console.log('hello');
    }
    console.log(typeof(obj))//object
    console.log(typeof(arr))//object
    console.log(typeof(fn))//function

    
    console.log(arr instanceof Object)//true
    console.log(obj instanceof Object)//true

    console.log(arr instanceof Array)//true
    console.log(obj instanceof Array)//false

    console.log(arr instanceof Number)//false

數據類型轉換:
數據類型的轉換有兩種:隱式轉換、強制轉換
隱式轉換:隱式轉換一般發生在運算中。

var num = 10;
    var obj = '20'
    var res = num + obj;//10+'20'
    console.log(res) //'1020'

    var obj2 = '11';
    var num2 = 5;
    var res2 = obj2 > num2;//'11'>5
    console.log(res2)//true

強制轉換:通常用String()、Number()、Boolean()轉化(可能會有失精度)

var num = 123;
console.log(typeof(num))//number
console.log(typeof (String(num)))//string

例行總結:
數據類型是JS中很重要的一部分,特別是值類型和引用類型的賦值區別。必定要理解好~

下一回:變量提高與函數聲明

相關文章
相關標籤/搜索