摘要:實際開發(fā)中,有時需要知道對象的所有屬性,原生提供了一個方法。這些元素是來自于給定的可直接枚舉的屬性,這些屬性的順序與手動遍歷該對象屬性時的一致。在中,非對象的參數(shù)將被強(qiáng)制轉(zhuǎn)換為一個對象。六要在原生不支持的就環(huán)境中添加兼容的可以添加以下腳本
實際開發(fā)中,有時需要知道對象的所有屬性,原生js提供了一個方法Object.keys()。
Object.keys(obj)返回的是一個數(shù)組,該數(shù)組的所有元素都是字符串。這些元素是來自于給定的obj可直接枚舉的屬性,這些屬性的順序與手動遍歷該對象屬性時的一致。
一. 傳入數(shù)組:返回索引
var arr = ["a", "b", "c"]; console.log(Object.keys(arr)); // console: ["0", "1", "2"]
二. 傳入對象:返回屬性名
var obj = {"a":"123","b":"345"}; console.log(Object.keys(obj)); //["a","b"] var obj1 = { 100: "a", 2: "b", 7: "c"}; console.log(Object.keys(obj1)); // console: ["2", "7", "100"] var obj2 = Object.create( {}, { getFoo : { value : function () { return this.foo } } } ); obj2.foo = 1; console.log(Object.keys(obj2)); // console: ["foo"]
三.傳入字符串:返回索引
var str = "ab1234"; console.log(Object.keys(str)); // ["0","1","2","3","4","5"]
四、構(gòu)造函數(shù):返回空數(shù)組或者屬性名
function Pasta(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.toString = function () { return (this.name + ", " + this.age + ", " + this.gender); } } console.log(Object.keys(Pasta)); //console: [] var spaghetti = new Pasta("Tom", 20, "male"); console.log(Object.keys(spaghetti)); //console: ["name", "age", "gender", "toString"]
五、注意事項
在ES5里,如果此方法的參數(shù)不是對象(而是一個原始值),那么它會拋出 TypeError。在ES6中,非對象的參數(shù)將被強(qiáng)制轉(zhuǎn)換為一個對象。
Object.keys("foo"); // TypeError: "foo" is not an object (ES5 code) Object.keys("foo"); // ["0", "1", "2"] (ES2015 code)
六、要在原生不支持的就環(huán)境中添加兼容的Object.keys(),可以添加以下腳本:
if (!Object.keys) { Object.keys = (function () { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({toString: null}).propertyIsEnumerable("toString"), dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; return function (obj) { if (typeof obj !== "object" && typeof obj !== "function" || obj === null) throw new TypeError("Object.keys called on non-object"); var result = []; for (var prop in obj) { if (hasOwnProperty.call(obj, prop)) result.push(prop); } if (hasDontEnumBug) { for (var i=0; i < dontEnumsLength; i++) { if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]); } } return result; } })() };
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96092.html
摘要:木易楊注意原始類型被包裝為對象木易楊原始類型會被包裝,和會被忽略。木易楊原因在于時,其屬性描述符為不可寫,即。木易楊解決方法也很簡單,使用我們在進(jìn)階期中介紹的就可以了,使用如下。 引言 上篇文章介紹了賦值、淺拷貝和深拷貝,其中介紹了很多賦值和淺拷貝的相關(guān)知識以及兩者區(qū)別,限于篇幅只介紹了一種常用深拷貝方案。 本篇文章會先介紹淺拷貝 Object.assign 的實現(xiàn)原理,然后帶你手動實...
摘要:基本概念方法接收一個函數(shù)作為累加器,數(shù)組中的每個值從左到右開始縮減,最終為一個值。例進(jìn)階應(yīng)用使用方法可以完成多維度的數(shù)據(jù)疊加。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。參考的內(nèi)建函數(shù)數(shù)組方法的高級技巧 基本概念 reduce() 方法接收一個函數(shù)作為累加器(accumulator),數(shù)組中的每個值(從左到右)開始縮減,最終為一個值。 reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括...
摘要:對象詳解對象深度剖析,深度理解對象這算是醞釀很久的一篇文章了。用空構(gòu)造函數(shù)設(shè)置類名每個對象都共享相同屬性每個對象共享一個方法版本,省內(nèi)存。 js對象詳解(JavaScript對象深度剖析,深度理解js對象) 這算是醞釀很久的一篇文章了。 JavaScript作為一個基于對象(沒有類的概念)的語言,從入門到精通到放棄一直會被對象這個問題圍繞。 平時發(fā)的文章基本都是開發(fā)中遇到的問題和對...
摘要:可以用來處理數(shù)組,但是會把數(shù)組視為對象。返回指定對象的原型內(nèi)部屬性的值,即,而非對象的。判斷一個對象是否存在于另一個對象的原型鏈上。該方法返回被凍結(jié)的對象。密封一個對象會讓這個對象變的不能添加新屬性,且所有已有屬性會變的不可配置。 showImg(https://segmentfault.com/img/bVboKpP?w=796&h=398); Object.assign(targe...
摘要:在學(xué)習(xí)過程中,為加上了中文的注釋,希望可以對其他想學(xué)習(xí)源碼的小伙伴有所幫助。數(shù)據(jù)綁定原理前面已經(jīng)講過數(shù)據(jù)綁定的原理了,現(xiàn)在從源碼來看一下數(shù)據(jù)綁定在中是如何實現(xiàn)的。 寫在前面 因為對Vue.js很感興趣,而且平時工作的技術(shù)棧也是Vue.js,這幾個月花了些時間研究學(xué)習(xí)了一下Vue.js源碼,并做了總結(jié)與輸出。文章的原地址:https://github.com/answershuto/le...
閱讀 2722·2023-04-25 21:26
閱讀 1521·2021-11-25 09:43
閱讀 1956·2019-08-30 15:52
閱讀 937·2019-08-30 14:05
閱讀 2622·2019-08-29 16:10
閱讀 421·2019-08-29 13:48
閱讀 1867·2019-08-29 12:47
閱讀 1306·2019-08-23 18:04