摘要:當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時(shí),等同于。因此只有字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值即數(shù)值字符串和布爾值都不會產(chǎn)生效果。注意,布爾值數(shù)值字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性上面。擁有布爾值的字段的默認(rèn)值都是。
Object
Object構(gòu)造函數(shù)創(chuàng)建一個(gè)對象包裝器。如果給定值是 null or undefined,將會創(chuàng)建并返回一個(gè)空對象,否則,將返回一個(gè)與給定值對應(yīng)類型的對象。布爾值、數(shù)值、字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性[[PrimitiveValue]]上面。只有字符串的包裝對象,會產(chǎn)生可枚舉屬性。
當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時(shí),Object 等同于 new Object()。
方法 Object.assign()Object.assign(target, ...sources)
target:目標(biāo)對象。sources:(多個(gè))源對象。
該方法用于將所有可枚舉的屬性的值從一個(gè)或多個(gè)源對象復(fù)制到目標(biāo)對象。它將返回目標(biāo)對象。
var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o3); console.log(obj); // { a: 1, b: 2, c: 3 } console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目標(biāo)對象自身也會改變。 obj===o1; //true, obj與o1完全相等
注意:
1.拷貝的屬性為源對象自身的并且可枚舉的(包括Symbol 類型的屬性)。
2.若目標(biāo)對象與源對象有同名屬性,或多個(gè)源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。覆蓋時(shí)直接替換。
var target = { a: { b: "c", d: "e" } } var source = { a: { b: "hello" } } Object.assign(target, source) // { a: { b: "hello" } } //target對象的a屬性被source對象的a屬性整個(gè)替換掉
3.在屬性拷貝過程中產(chǎn)生異常時(shí),該方法會拋出一個(gè) TypeError 異常,拷貝過程中斷,已經(jīng)拷貝成功的屬性不會受到影響,還未拷貝的屬性將不會再被拷貝。
4.Object.assign 會跳過那些值為 null 或 undefined 的源對象。
5.Object.assign方法實(shí)行的是淺拷貝,而不是深拷貝。 也就是說,如果源對象某個(gè)屬性的值是對象,那么目標(biāo)對象拷貝得到的是這個(gè)對象的引用。
var obj1 = {a: {b: 1}}; var obj2 = Object.assign({}, obj1); obj1.a.b = 2; obj2.a.b // 2 //Object.assign拷貝得到的是這個(gè)對象的引用。這個(gè)對象的任何變化,都會反映到目標(biāo)對象上面。
6.若參數(shù)不是對象,則會先轉(zhuǎn)成對象。由于undefined和null無法轉(zhuǎn)成對象,所以當(dāng)null 和 undefined不在首參數(shù)時(shí),會被忽略。在首參數(shù),則報(bào)錯(cuò)。Object.assign不會拷貝對象的內(nèi)部屬性[[PrimitiveValue]]。因此只有字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值(即數(shù)值、字符串和布爾值)都不會產(chǎn)生效果。
var v1 = "abc"; var v2 = true; var v3 = 10; var v4 = Symbol("foo") var obj = Object.assign({}, v1, null, v2, undefined, v3, v4); //注意,布爾值、數(shù)值、字符串分別轉(zhuǎn)成對應(yīng)的包裝對象時(shí),它們的原始值都在包裝對象的內(nèi)部屬性[[PrimitiveValue]]上面。只有字符串的包裝對象,會產(chǎn)生可枚舉屬性,這些屬性會被拷貝。因此其他類型的值(即數(shù)值、字符串和布爾值)不在首參數(shù),除了字符串會以數(shù)組形式,拷貝入目標(biāo)對象,其他值都不會產(chǎn)生效果。 console.log(obj); // { "0": "a", "1": "b", "2": "c" } Object(true) // {[[PrimitiveValue]]: true} Object(10) // {[[PrimitiveValue]]: 10} Object("abc") // {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}
7.Object.assign可以用來處理數(shù)組,但是會把數(shù)組視為對象。
Object.assign([1, 2, 3], [4, 5]) // [4, 5, 3] //Object.assign把數(shù)組視為屬性名為0、1、2的對象,因此源數(shù)組的0號屬性4覆蓋了目標(biāo)數(shù)組的0號屬性1。
8.拷貝訪問器時(shí),只拷貝其值,訪問器屬性會被轉(zhuǎn)換成數(shù)據(jù)屬性。
var obj = { foo: 1, get bar() { return 2; } }; // copy.bar的值來自obj.bar的getter函數(shù)的返回值 var copy = Object.assign({}, obj); // { foo: 1, bar: 2 } Object.getOwnPropertyDescriptor(copy,"bar"); //{value: 2, writable: true, enumerable: true, configurable: true} //可以看到bar在obj對象里為存取描述,而在copy對象里面變成了數(shù)據(jù)描述。
可通過以下代碼進(jìn)行完整拷貝。該方法為淺拷貝。
Object.create( Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj) );
var t={ a:{ a1:11, a2:12 }, b:2 }; var c=Object.getOwnPropertyDescriptors(t); var m=Object.create({},c); m.a.a1=333; t.a.a1 //333 //可以看到拷貝時(shí)屬性值是淺拷貝Object.create()
Object.create(proto, [ propertiesObject ])
proto:一個(gè)對象,應(yīng)該是新創(chuàng)建的對象的原型,也可以是null。propertiesObject:可選。該參數(shù)對象是一組屬性與值,該對象的屬性名稱將是新創(chuàng)建的對象的屬性名稱,值只能是屬性描述符。propertiesObject也可以是undefined。
該方法使用指定的原型對象及其屬性去創(chuàng)建一個(gè)新的對象。
// 創(chuàng)建一個(gè)以另一個(gè)空對象為原型,且擁有一個(gè)屬性p的對象 o = Object.create({}, { p: { value: 42 } }) // 省略了的屬性特性默認(rèn)為false,所以屬性p是不可寫,不可枚舉,不可配置的: o.p = 333 o.p //42
注意:
1.propertiesObject參數(shù)對象不能是 null,并且只有該對象中自身擁有的可枚舉的屬性才有效,也就是說該對象的原型鏈上屬性是無效的。
var a={ //foo會成為所創(chuàng)建對象的數(shù)據(jù)屬性 foo:{ writable:true, configurable:true, value: 222 }, // abc會成為所創(chuàng)建對象的訪問器屬性 abc: { configurable: false, get: function() { return 10 }, set: function(value) { console.log("Setting `o.abc` to", value); } } }; //原型鏈上的屬性不會出現(xiàn) a.__proto__={ bar:{ writable:true, configurable:true, value: 555, enumerable:true } }; //three屬性可枚舉,因此會出現(xiàn)在o對象中 Object.defineProperty(a,"three",{ value:{ value:333 }, enumerable:true }); //four屬性不可枚舉,因此不會出現(xiàn)在o對象中 Object.defineProperty(a,"four",{ value:{ value:444 }, enumerable:false }) var o = Object.create(Object.prototype,a); o //{foo: 222, three: 333}
2.如果 proto參數(shù)不是 null 也不是對象,則拋出一個(gè) TypeError 異常。
Object.defineProperty()Object.defineProperty(obj, prop, descriptor)
obj:需要被操作的目標(biāo)對象。prop:目標(biāo)對象需要定義或修改的屬性的名稱。descriptor:將被定義或修改的屬性的描述符。
該方法會直接在一個(gè)對象上定義一個(gè)新屬性,或者修改一個(gè)對象的現(xiàn)有屬性, 并返回這個(gè)對象。
對象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存取描述符。數(shù)據(jù)描述符是一個(gè)擁有可寫或不可寫值的屬性。存取描述符是由一對 getter-setter 函數(shù)功能來描述的屬性。描述符必須是兩種形式之一;不能同時(shí)是兩者。
數(shù)據(jù)描述符的鍵值:configurable,enumerable,value,writable。
存取描述符的鍵值:configurable,enumerable,get,set。
configurable:表示對象的屬性是否可以被刪除,以及除writable和value外的其他特性是否可以被修改。默認(rèn)為 false。如果一個(gè)屬性的 configurable 為 false,則其 writable 特性也只能修改為 false。
var a={}; Object.defineProperty(a,"m", {enumerable:true,configurable:false,value:111,writable:true}); //將enumerable改為false,報(bào)錯(cuò)TypeError: Cannot redefine property: m Object.defineProperty(a,"m", {enumerable:false,configurable:false,value:111,writable:true}); //將writable改為false,成功 Object.defineProperty(a,"m", {enumerable:true,configurable:false,value:111,writable:false}); //再將writable改為true,報(bào)錯(cuò)TypeError: Cannot redefine property: m Object.defineProperty(a,"m", {enumerable:true,configurable:false,value:111,writable:true});
enumerable:表示對象的屬性是否可枚舉。默認(rèn)為 false。
writable:表示對象的屬性是否能被賦值運(yùn)算符改變。默認(rèn)為 false。
注意:
1.當(dāng)描述符中省略某些字段時(shí),這些字段將使用它們的默認(rèn)值。擁有布爾值的字段的默認(rèn)值都是false。value,get和set字段的默認(rèn)值為undefined。定義屬性時(shí)如果沒有g(shù)et/set/value/writable,那它被歸類為數(shù)據(jù)描述符。
var o = {}; // 創(chuàng)建一個(gè)新對象 Object.defineProperty(o, "a", { enumerable : true, configurable : true }); Object.getOwnPropertyDescriptor(o,"a") //{value: undefined, writable: false, enumerable: true, configurable: true}
2.使用點(diǎn)運(yùn)算符和Object.defineProperty()為對象的屬性賦值時(shí),數(shù)據(jù)描述符中的屬性默認(rèn)值是不同的。
var o = {}; o.a = 1; // 等同于 : Object.defineProperty(o, "a", { value : 1, writable : true, configurable : true, enumerable : true }); // 另一方面, Object.defineProperty(o, "a", { value : 1 }); // 等同于 : Object.defineProperty(o, "a", { value : 1, writable : false, configurable : false, enumerable : false });Object.defineProperties()
Object.defineProperties(obj, props)
obj:將要被添加屬性或修改屬性的對象。props:該對象的一個(gè)或多個(gè)鍵值對定義了將要為對象添加或修改的屬性的具體配置。
該方法直接在一個(gè)對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。
var obj = {}; Object.defineProperties(obj, { "property1": { value: true, writable: true }, "property2": { value: "Hello", writable: false } // 等等. }); alert(obj.property2) //彈出"Hello"Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor(obj, prop)
obj:需要查找的目標(biāo)對象。prop:目標(biāo)對象內(nèi)屬性名稱(String類型)。
該方法返回指定對象上一個(gè)自有屬性對應(yīng)的屬性描述符。(自有屬性指的是直接賦予該對象的屬性,不需要從原型鏈上進(jìn)行查找的屬性)。即只查找自有屬性。若不存在則返回 undefined。
Object.getOwnPropertyDescriptors()Object.getOwnPropertyDescriptors(obj)
obj:任意對象。
該方法用來獲取一個(gè)對象的所有自身屬性的描述符。如果沒有任何自身屬性,則返回空對象。
Object.is()Object.is(value1, value2):確定兩個(gè)值是否相同。
Object.is() 會在下面這些情況下認(rèn)為兩個(gè)值是相同的:
兩個(gè)值都是 undefined
兩個(gè)值都是 null
兩個(gè)值都是 true 或者都是 false
兩個(gè)值是由相同個(gè)數(shù)的字符按照相同的順序組成的字符串
兩個(gè)值指向同一個(gè)對象
兩個(gè)值都是數(shù)字并且
都是正零 +0
都是負(fù)零 -0
都是 NaN
都是除零和 NaN 外的其它同一個(gè)數(shù)字
Object.is()與嚴(yán)格相等運(yùn)算符 === 不同,“===”會把 -0 和 +0 這兩個(gè)數(shù)值視為相同的,還會把兩個(gè) NaN 看成是不相等的。
+0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true屬性的遍歷
Object.keys(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵名(不含Symbol屬性)。
Object.values(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵值(不含Symbol屬性)。
Object.entries(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有可枚舉屬性的鍵值對數(shù)組(不含Symbol屬性)。該功能為試驗(yàn)中功能。
for...in:循環(huán)遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性)。
Object.getOwnPropertyNames(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的可枚舉和不可枚舉屬性的名稱(不含Symbol屬性)。
Object.getOwnPropertySymbols(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有symbol屬性的名稱。
Reflect.ownKeys(obj):返回一個(gè)數(shù)組,成員是參數(shù)對象自身的所有屬性的名稱,不管屬性名是Symbol或字符串,也不管是否可枚舉。Reflect.ownKeys的返回值等同于Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj))。
以上的方法遍歷對象的屬性,都遵守同樣的屬性遍歷的次序規(guī)則。
首先遍歷所有屬性名為數(shù)值的屬性,按照數(shù)字排序。
其次遍歷所有屬性名為字符串的屬性,按照生成時(shí)間排序。
最后遍歷所有屬性名為Symbol值的屬性,按照生成時(shí)間排序。
原型改變一個(gè)對象的 [[Prototype]] 屬性,是一個(gè)非常慢且影響性能的操作。推薦使用 Object.create()創(chuàng)建帶有你想要的[[Prototype]]的新對象。
_proto_Object.prototype 的 _proto_ 屬性是一個(gè)訪問器屬性??墒褂胈proto_ 進(jìn)行原型的獲取與設(shè)置。但這個(gè)是過時(shí)且不推薦使用的。使用_proto_ 進(jìn)行原型的設(shè)置時(shí),對象應(yīng)是可擴(kuò)展的,不然會拋出一個(gè) TypeError 錯(cuò)誤。
var a={}; Object.preventExtensions(a); a.__proto__={} //Uncaught TypeError: #Object.getPrototypeOf()
Object.getPrototypeOf(object):返回指定對象的原型(即內(nèi)部[[Prototype]]屬性的值)。如果沒有繼承屬性,則返回 null 。
Object.setPrototypeOf()Object.setPrototypeOf(obj, prototype):設(shè)置一個(gè)對象的原型。返回參數(shù)對象本身,即obj對象。
若對象是不可擴(kuò)展的,則會拋出 TypeError異常。如果prototype參數(shù)不是一個(gè)對象或者null(例如,數(shù)字,字符串,boolean,或者 undefined),則什么都不做。否則,該方法將obj的原型修改為新的值。推薦使用該方法來修改對象原型。
如果第一個(gè)參數(shù)不是對象,會自動轉(zhuǎn)為對象。但是由于返回的還是第一個(gè)參數(shù),所以這個(gè)操作不會產(chǎn)生任何效果。由于undefined和null無法轉(zhuǎn)為對象,所以如果第一個(gè)參數(shù)是undefined或null,就會報(bào)錯(cuò)。
Object.setPrototypeOf(1, {}) === 1 // true Object.setPrototypeOf(undefined, {}) // TypeError: Object.setPrototypeOf called on null or undefinedObject.prototype.isPrototypeOf()
prototypeObj.isPrototypeOf(object):用于測試prototypeObj對象是否存在于object對象的原型鏈上。如果 prototypeObj 為 undefined 或 null,會拋出 TypeError。
凍結(jié)、密封、擴(kuò)展一個(gè)對象默認(rèn)是可擴(kuò)展的。
Object.freeze()Object.freeze(obj):凍結(jié)一個(gè)對象,該方法返回被凍結(jié)的對象。凍結(jié)對象的屬性不能進(jìn)行增、刪操作,也不能修改該對象已有屬性的屬性描述符鍵值對。
凍結(jié)對象的所有自身屬性都不可能以任何方式被修改,但對該對象原型沒有影響(即仍可對該對象原型上的屬性進(jìn)行增、刪、改操作)。任何嘗試修改該對象的操作都會失敗,可能是靜默失敗,也可能會拋出異常(嚴(yán)格模式中)。
數(shù)據(jù)屬性的值不可更改,訪問器屬性(有g(shù)etter和setter)也同樣(但由于是函數(shù)調(diào)用,給人的錯(cuò)覺是還是可以修改這個(gè)屬性)。
var theValue=0; var t={ get foo(){ return theValue; }, set foo(v){ theValue=v; } } Object.freeze(t); //不能修改foo屬性的get Object.defineProperty(t,"foo",{ get(){ return 222; } }) //TypeError: Cannot redefine property: foo //由于foo是訪問器屬性,所以還是可以修改t.foo的值。 t.foo //0 t.foo=3; t.foo //3
如果一個(gè)屬性的值是個(gè)對象,則這個(gè)對象中的屬性是可以修改的,除非它也是個(gè)凍結(jié)對象。
obj = { internal : {} }; Object.freeze(obj); obj.internal.a = "aValue"; obj.internal.a // "aValue"
Object.freeze(obj)操作做了兩件事:1.將對象變成不可擴(kuò)展。2.將對象屬性的configurable和writable變成false。
var a={ m:111, get foo(){ return 333; } }; var before=Object.getOwnPropertyDescriptors(a); Object.freeze(a); var after=Object.getOwnPropertyDescriptors(a);Object.isFrozen()
Object.isFrozen(obj):判斷一個(gè)對象是否被凍結(jié)。
凍結(jié)對象的特征:
不可擴(kuò)展。
所有自身屬性的configurable為false。
所有自身數(shù)據(jù)屬性(即無getter和setter的屬性)的writable為false。
在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)凍結(jié)的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。
Object.isFrozen(1); // TypeError: 1 is not an object (ES5 code) Object.isFrozen(1); // true (ES2015 code)Object.seal()
Object.seal(obj):可以讓一個(gè)對象密封,并返回被密封后的對象。密封對象將會阻止向?qū)ο筇砑有碌膶傩?,并且會將所有已有屬性的可配置性(configurable)置為不可配置(false),其效果就是屬性變的不可刪除,以及一個(gè)數(shù)據(jù)屬性不能被重新定義成為訪問器屬性,或者反之。但是可寫性描述(writable)為可寫(true)的屬性的值仍然可被修改。
嘗試刪除一個(gè)密封對象的屬性或者將某個(gè)密封對象的屬性從數(shù)據(jù)屬性轉(zhuǎn)換成訪問器屬性,結(jié)果會靜默失敗或拋出TypeError 異常(嚴(yán)格模式)。
不會影響從原型鏈上繼承的屬性。但__proto__ 屬性的值也會不能修改。
Object.isSealed()Object.isSealed(obj):判斷一個(gè)對象是否被密封。
密封對象的特征:
不可擴(kuò)展。
所有自身屬性的configurable為false。
在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)密封的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。
Object.isSealed(1); // TypeError: 1 is not an object (ES5 code) Object.isSealed(1); // true (ES6 code)Object.preventExtensions()
Object.preventExtensions(obj):讓一個(gè)對象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的屬性,并返回該不可擴(kuò)展對象。
如果一個(gè)對象可以添加新的屬性,則這個(gè)對象是可擴(kuò)展的。preventExtensions只能阻止一個(gè)對象不能再添加新的自身屬性,但仍然可以為該對象的原型添加屬性。然而Object.preventExtensions會阻止一個(gè)對象將__proto__屬性重新指向另一個(gè)對象。
嘗試給一個(gè)不可擴(kuò)展對象添加新屬性的操作將會失敗,不過可能是靜默失敗,也可能會拋出 TypeError 異常(嚴(yán)格模式)。在 ECMAScript 5 中可擴(kuò)展的對象可以變得不可擴(kuò)展,但反過來不行。
Object.isExtensible()Object.isExtensible(obj):判斷一個(gè)對象是否是可擴(kuò)展的。
在 ES6中, 如果參數(shù)不是一個(gè)對象類型,則將被視為一個(gè)不可擴(kuò)展的普通對象,因此會返回 true。但在 ES5 中,會拋出一個(gè) TypeError異常。
Object.isExtensible(1); // TypeError: 1 is not an object (ES5 code) Object.isExtensible(1); // false (ES6 code)其他實(shí)例方法 Object.prototype.hasOwnProperty()
obj.hasOwnProperty(prop):返回一個(gè)布爾值,指示對象是否具有指定的屬性作為自身屬性(即不是從原型鏈上繼承到的屬性)。
prop:要檢測的屬性 字符串名稱或者 Symbol。
object.toString():返回一個(gè)表示該對象的字符串。
每個(gè)對象都有一個(gè) toString() 方法,當(dāng)對象被表示為文本值時(shí)或者當(dāng)以期望字符串的方式引用對象時(shí),該方法被自動調(diào)用。默認(rèn)情況下,toString() 方法被每個(gè)繼承自O(shè)bject的對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象類型。
let obj = new Object(); obj.toString(); // 返回 [object Object]
所以可以通過Object.prototype.toString.call(obj)來檢測對象類型。
var toString = Object.prototype.toString; toString.call(new Date); // [object Date] toString.call(new String); // [object String] toString.call(Math); // [object Math] //Since JavaScript 1.8.5 toString.call(undefined); // [object Undefined] toString.call(null); // [object Null]Object.prototype.toLocaleString()
obj.toLocaleString():返回調(diào)用 toString() 方法的結(jié)果。
Object.prototype.propertyIsEnumerable()obj.propertyIsEnumerable(prop):返回一個(gè)布爾值,表明指定的屬性名是否是當(dāng)前對象可枚舉的自身屬性。
Object.prototype.valueOf()object.valueOf():返回指定對象的原始值。
JavaScript 調(diào)用 valueOf() 方法用來把對象轉(zhuǎn)換成原始類型的值(數(shù)值、字符串和布爾值)。 你很少需要自己調(diào)用此函數(shù);當(dāng)遇到一種需要轉(zhuǎn)換成一個(gè)原始值情況時(shí)候, JavaScript 會自動調(diào)用此函數(shù)。
默認(rèn)情況下, valueOf()會被每個(gè)對象Object繼承。每一個(gè)內(nèi)置對象都會覆蓋這個(gè)方法為了返回一個(gè)合理的值,如果對象沒有原始值,valueOf()就會返回對象自身。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87391.html
摘要:返回值是一個(gè)對象,如果是訪問器屬性,這個(gè)對象的屬性有和如果是數(shù)據(jù)屬性,這個(gè)對象的屬性有和。上一篇面向?qū)ο蟀鎵K之對象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對象 這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個(gè)屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript ...
摘要:新增了第七種類型的值數(shù)值字符串布爾值對象數(shù)據(jù)類型判斷有三種方法,可以判斷一個(gè)值的類型運(yùn)算符運(yùn)算符方法運(yùn)算符運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型。運(yùn)算符運(yùn)算符返回一個(gè)布爾值,表示對象是否為某個(gè)構(gòu)造函數(shù)的實(shí)例。 1.數(shù)據(jù)類型 JavaScript一共有六種數(shù)據(jù)類型。(ES6新增了第七種Symbol類型的值) 數(shù)值(Number) 字符串(String) 布爾值(boolean) undefin...
介紹 在創(chuàng)建對象的時(shí)候,我們有2種常用方法 一個(gè)是文本標(biāo)記法(var obj = {}),一種是運(yùn)用Object函數(shù)進(jìn)行對象的創(chuàng)建(new Object()). 但是這兩種方式并不是創(chuàng)建的一個(gè)完完全全干干凈凈的對象,這里的干凈只得是沒有繼承鏈. 幸運(yùn)的是,ES5為我們提供了一種創(chuàng)建完全干凈的對象的方法,Object.create函數(shù),接下我將向大家介紹Obje...
摘要:盡管的右操作數(shù)是構(gòu)造函數(shù),但計(jì)算過程實(shí)際是檢測了對象的繼承關(guān)系。通過創(chuàng)建的對象使用構(gòu)造函數(shù)的屬性作為它們的原型。 JavaScript之對象屬性 Object.create()繼承 ECMAScript 5定義了一個(gè)名為Object.create()的方法,它創(chuàng)建一個(gè)新對象, 其中第一個(gè)參數(shù)是這個(gè)對象的原型。Object.create()提供第二個(gè)可選參數(shù),用以對對象的屬性進(jìn)行進(jìn)一步描...
摘要:判斷變量類型數(shù)據(jù)類型種操作符可能返回的值如下注意的能力有限,其對于類型返回的都是使用場景區(qū)分對象和原始類型要區(qū)分一種對象類型和另一種對象類型可以使用運(yùn)算符或?qū)ο髮傩赃\(yùn)算符用法左邊的運(yùn)算數(shù)是一個(gè)右邊運(yùn)算數(shù)是對象類的名字或者構(gòu)造函數(shù)返回或如果是 判斷變量類型 javaSctipt數(shù)據(jù)類型7種: Number, String, Boolean, Null, Undefined, Object...
摘要:在最開始的時(shí)候,原型對象的設(shè)計(jì)主要是為了獲取對象的構(gòu)造函數(shù)。同理數(shù)組通過調(diào)用函數(shù)通過調(diào)用原型鏈中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)繼承的主要方法。 對象的創(chuàng)建 在JavaScript中創(chuàng)建一個(gè)對象有三種方式??梢酝ㄟ^對象直接量、關(guān)鍵字new和Object.create()函數(shù)來創(chuàng)建對象。 1. 對象直接量 創(chuàng)建對象最直接的方式就是在JavaScript代碼中使用對象直接量。在ES5...
閱讀 2979·2021-11-25 09:43
閱讀 3601·2021-11-24 11:13
閱讀 3374·2021-10-14 09:42
閱讀 2579·2021-09-23 11:53
閱讀 3623·2021-09-22 15:57
閱讀 3235·2021-09-02 09:54
閱讀 3511·2019-08-30 13:47
閱讀 1651·2019-08-29 16:55