摘要:創(chuàng)建對象創(chuàng)建一個普通對象創(chuàng)建一個沒有原型的新對象不繼承任何屬性和方法返回對象中可枚舉的自我屬性的名稱的數(shù)組返回對象中所有自我屬性的名稱的數(shù)組屬性的特性屬性有兩種特性數(shù)據(jù)屬性和存取器屬性數(shù)據(jù)屬性存取器屬性可以獲得某個對象特定自有屬性的屬性描述
Object.create(o)
創(chuàng)建對象
Object.create({x: 1}) //創(chuàng)建一個普通對象 Object.create(null) //創(chuàng)建一個沒有原型的新對象, 不繼承任何屬性和方法Object.keys(o)
返回對象中可枚舉的自我屬性的名稱的數(shù)組
Object.getOwnPropertyNames(o)返回對象中所有自我屬性的名稱的數(shù)組
屬性的特性屬性有兩種特性, 數(shù)據(jù)屬性和存取器屬性
數(shù)據(jù)屬性: {value: , writable, enumerable, configurable}
存取器屬性: {get: , set, enumerable, configurable}
可以獲得某個對象特定自有屬性的屬性描述符
Object.getOwnPropertyDescriptor({x:1}, "x") ==> Object {value: 1, writable: true, enumerable: true, configurable: true}
若想要獲取繼承屬性的屬性描述符, 需要遍歷原型鏈(Object.getProtytypeOf())
Object.definePropertyObject.defineProperty({}, "x", { value: 1, //值 writable: true, enumerable: true, configurable: true } Object.defineProperty({}, { x: { value: 1, writable: true, enumerable: true, configurable: true}, x: { value: 2, writable: true, enumerable: true, configurable: true}, r: { get: function() { return Math.max(this.x, this.y)}, enumerable: true, configurable: true } })
configuration = false 時為 不可配置
如果存取器屬性是不可配置的, 則不能修改get和set, 也不能轉(zhuǎn)換為數(shù)據(jù)屬性
如果數(shù)據(jù)屬性是不可配置的, 則不能轉(zhuǎn)換為存取器屬性
如果數(shù)據(jù)屬性是不可配置的, 則不能將writable從false->true, 但是可以從true->false
如果數(shù)據(jù)屬性是不可配置且為可寫時, 則不能修改它的值, 然而可配置但不可寫時, 值是可以修改的(實(shí)際上是先把可寫性轉(zhuǎn)成true, 修改值后, 再改為false)
完整復(fù)制屬性特性的extend方法
Object.defineProperty(Object.prototype, "extend", { writable: true, enumerable: false, configurable: true, value: function(o){ //獲取所有可枚舉的自有屬性 var names = Object.getOwnPropertyNames(o); for(var i = 0; i < names.length; i++){ if (names[i] in this) continue; //獲取屬性描述符 var desc = Object.getOwnPropertyDescriptor(o, names[i]); //定義屬性 Object.defineProperty(this, names[i], desc); } } } );
注:
ECMAScript 5 之前的非標(biāo)準(zhǔn)方法
lookupGetter
lookupSetter
defineGetter
defineSetter
查詢原型
注: Firefox, Safari和Chrome支持__proto__查詢, IE和Opera不支持
判斷對象是否是可擴(kuò)展的
Object.preventExtensions(o)把對象轉(zhuǎn)為不可擴(kuò)展的
Object.seal(o)在preventExtensions的基礎(chǔ)上, 將所有自有屬性設(shè)置為不可配置的,即不能添加新屬性, 且不能改已有屬性, 可以用Object.isSealed來檢測
Object.freeze(o)對象凍結(jié), 在seal的基礎(chǔ)上, 將自有的所有數(shù)據(jù)屬性設(shè)置為只讀, 可以用Object.isFrozen()來檢測
Object.assign淺層復(fù)制, 主要用于對象的擴(kuò)展
Object.prototype一般只有function對象擁有prototype屬性
__proto__是原型鏈的實(shí)際指針
// 原型鏈的頂端 log((Object.prototype).__proto__); // null log(Function.prototype.__proto__ == Object.prototype); // true log(Object.__proto__ == Function.prototype); // true log(Function.__proto__ == Function.prototype); // true log(Array.__proto__ == Function.prototype); // true log(Company.__proto__ == Function.prototype); // true log(Object.__proto__ == Function.prototype); // true log(Company.prototype.__proto__ == Object.prototype); // true log(c1.__proto__ == Company.prototype); // true 數(shù)據(jù)摘自 http://2660311.blog.51cto.com/2650311/1358226/hasOwnProperty
用來檢測給定的名字是否是對象的自有屬性, 對于繼承的屬性將返回false.
var o = {x: 1} o.hasOwnProperty("x") // true: o有個自有屬性x o.hasOwnProperty("y") // false: o中不存在屬性y o.hasOwnProperty("toString") // false: toString是繼承屬性
in 可以區(qū)分不存在的屬性和存在但值為undefined的屬性
var o = {x: undefined} "x" in o // true, 屬性存在 "y" in o //false, 屬性不存在 delete o.x; "x" in o //false, 已刪除, 不存在propertyIsEnumerable
是hasOwnProperty的增加版, 只有檢測到是自有屬性且可枚舉(enumerable==true)時才返回true
var o = {x: 1} o.propertyIsEnumerable("x") //true Object.prototype.propertyIsEnumerable("toString") //false, 不可枚舉toString和toLocalString
通常來說, toLocalString會直接調(diào)用toString的值返回, 除了特殊的幾個對象外:
Date, Number 會做本地化的轉(zhuǎn)換
Array, Array在做toLocalString的時候會調(diào)每個元素的toLocalString, 而非toString
valueOf和toString方法非常類似, 只有當(dāng)需要轉(zhuǎn)換成對象的某種原始值, 而非字符串時才會調(diào)用, 尤其是在Date和Number.
本文以學(xué)習(xí)為主, 主要資源來自于<
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/86336.html
摘要:和的作用一樣,區(qū)別在于寫法語法對象對象作用判斷對象是否在對象的原型鏈上語法對象構(gòu)造函數(shù)作用判斷構(gòu)造函數(shù)的屬性是否在對象的原型鏈上,如果在,就返回屬性是否可枚舉用于檢查給定的屬性是否能夠使用語句。 ## javascript對象原型成員詳解 ## ECMAScript 中的對象就是一組數(shù)據(jù)和功能的集合,對象可以通過 new 操作符后跟要創(chuàng)建的對象名稱來...
摘要:數(shù)字和解釋因?yàn)闆]有任何一個操作數(shù)是字符串,將轉(zhuǎn)換為一個數(shù)字做數(shù)字加法運(yùn)算因?yàn)闆]有操作數(shù)是對象或字符串,將轉(zhuǎn)換為。結(jié)論以避免潛在的問題,不使用加法運(yùn)算符處理對象,除非你清楚地使用或方法。 前端學(xué)習(xí):教程&模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試資源匯總 JavaScript一路走來,備受爭議,與其說它備受爭議,不如說它不夠完美。不夠完美?那完美了還得了,它的...
摘要:我們再來回顧下文首提出的這個比較運(yùn)算,首先為對象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對于右側(cè)的,首先會進(jìn)行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運(yùn)算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與工程實(shí)踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運(yùn)算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:我們再來回顧下文首提出的這個比較運(yùn)算,首先為對象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對于右側(cè)的,首先會進(jìn)行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運(yùn)算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與工程實(shí)踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運(yùn)算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:原文地址詳解的類博主博客地址的個人博客從當(dāng)初的一個彈窗語言,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。那么,的類又該怎么定義呢在面向?qū)ο缶幊讨?,類是對象的模板,定義了同一組對象又稱實(shí)例共有的屬性和方法。這個等同于的屬性現(xiàn)已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類 博主博客地址:Damonare的個人博客 ??Javascript從當(dāng)初的一個彈窗語言,一...
閱讀 2858·2021-11-22 13:54
閱讀 3522·2021-11-16 11:44
閱讀 1370·2021-09-07 10:19
閱讀 1470·2019-08-29 17:30
閱讀 3196·2019-08-29 11:33
閱讀 3543·2019-08-26 12:18
閱讀 2886·2019-08-26 11:53
閱讀 1336·2019-08-26 10:47