Object.keys()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
Object.keys() æ¹æ³æåå³ä¸åç±æå®ç©ä»¶ææå¯åèä¹å±¬æ§çµæçé£åï¼è©²é£åä¸ççæåé åºèä½¿ç¨ for...in é²è¡è¿ä»£çé åºç¸åï¼å
©è
çå·®ç°å¨æ¼ for-in è¿´åéæè¿ä»£åºç©ä»¶èªå
¶ååéæç¹¼æ¿ä¾çå¯åè屬æ§ï¼ã
èªæ³
Object.keys(obj)
忏
obj-
ç©ä»¶ï¼ç¨ä»¥åå³å ¶å¯åè屬æ§ã
åå³å¼
åå³ä¸åå å«çµ¦å®ç©ä»¶å §ææå¯åè屬æ§çå串é£åã
æè¿°
Object.keys() åå³ä¸åé£åï¼é£åä¸çåå
ç´ çºç´å±¬æ¼ obj ï¼å°æå¯åè屬æ§åçå串ãåå³çµæçæåºï¼èæåå°ç©ä»¶å±¬æ§ä½è¿´åè¿ä»£ççµææåºç¸åã
ç¯ä¾
var arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
// é¡ä¼¼é£åçç©ä»¶
var obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
// ææé¨æ© key æåºï¼é¡ä¼¼é£åçç©ä»¶
var an_obj = { 100: "a", 2: "b", 7: "c" };
console.log(Object.keys(an_obj)); // console: ['2', '7', '100']
// getFoo 䏿¯å¯åèç屬æ§
var my_obj = Object.create(
{},
{
getFoo: {
value: function () {
return this.foo;
},
},
},
);
my_obj.foo = 1;
console.log(Object.keys(my_obj)); // console: ['foo']
妿æ³åå¾ç©ä»¶çææå±¬æ§ï¼å
æ¬éå¯åèç屬æ§ï¼è«åé± Object.getOwnPropertyNames().
å註
å¨ ES5 ä¸ï¼å¦æéåæ¹æ³ç忏䏿¯ä¸åæ¨æºç©ä»¶(ä¾å¦åå§åå¥)ï¼å°æç¢ç TypeErroré¯èª¤ãèå¨ ES2015ï¼éç©ä»¶ç忏尿強å¶è½ææç©ä»¶ã
Object.keys("foo");
// TypeError: "foo" is not an object (ES5 code)
Object.keys("foo");
// ["0", "1", "2"] (ES2015 code)
Polyfill
å¦éå¨åç䏿¯æ´ãè¼èçç°å¢ä¸å¢å Object.keys çç¸å®¹æ§ï¼è«è¤è£½ä»¥ä¸ç段ï¼
// From https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function () {
"use strict";
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 = [],
prop,
i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
})();
}
è«æ³¨æä»¥ä¸çä»£ç¢¼çæ®µå¨ IE7 ä¸( IE8 乿å¯è½ )ï¼å¾ä¸åç window å³å ¥ç©ä»¶å°å å«éå¯åèç key ã
è¼ç²¾ç°¡ççè¦½å¨ Polyfillï¼è«åé± Javascript - Object.keys Browser Compatibility.
è¦ç¯
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.keys> |