讀vue源碼 鞏固js 2019-05-24

源碼地址  https://unpkg.com/[email protected]/dist/vue.js

以下知識點大部分都出現在vue源碼中,少部分爲個人擴展補充

1. Object.freeze() 方法可以凍結一個對象。一個被凍結的對象再也不能被修改;凍結了一個對象則不能向這個對象添加新的屬性,不能刪除已有屬性,不能修改該對象已有屬性的可枚舉性、可配置性、可寫性,以及不能修改已有屬性的值。此外,凍結一個對象後該對象的原型也不能被修改freeze() 返回和傳入的參數相同的對象

 var emptyObject = Object.freeze({});

2.檢測對象類型 typeof null,typeof array 都是 object

Object.prototype.toString.call()
console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp] 我靠( ⊙ o ⊙ )啊!還能檢測是否是正則

3.定義一個沒有任何 原型方法的對象   爲什麼vue源碼中定義對象不直接用 var obj = { } ?? 而用如下方法  地址

var map = Object.create(null);//原型式繼承 

一個非常乾淨且高度可定製的對象

 

在js中null是沒有任何屬性和方法的。你繼承了一個null,所以裏面沒有任何東西。

4.如何檢測一個對象中是否含有某個屬性?

var obj = {
    bar: 'Here be dragons'
}

1. obj.hasOwnProperty('bar')  //會返回一個布爾值 true 含有屬性 ,false反之

2. Object.prototype.hasOwnProperty.call(obj,'bar') //true

3. in 方法  
    var mycar = {make: "Honda", model: "Accord", year: 1998};

    3.1 console.log("make" in mycar)// true

    3.2 //如果你使用 delete 運算符刪除了一個屬性,則 in 運算符對所刪除屬性返回 false
        var Employee = {
          firstname: "John",
          lastname: "Doe"
        }
        delete Employee.firstname;

        (delete 操作符用於刪除對象的某個屬性)

    3.3 //如果你只是將一個屬性的值賦值爲undefined,而沒有刪除它,則 in 運算仍然會返回true
    
    3.4 // 如果一個屬性是從原型鏈上繼承來的,in 運算符也會返回 true

5.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章