源碼地址 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.