javascript - 将 Object.defineProperties 与符号一起使用是否有效?

标签 javascript ecmascript-6 symbols defineproperty

让我们看下面的代码:

var obj = {};
var x = Symbol();
Object.defineProperties(obj, {
  [x]: {
    value: true,
    writable: true
  },
  "property2": {
    value: "Hello",
    writable: false
  }
  // etc. etc.
});
console.log(obj[x])

这有效吗?

使用 native Object.defineproperties 代码,我们在 console.log 中得到 true。

用zone.js的polyfill

其形式为:

  Object.defineProperties = function (obj, props) {
    Object.keys(props).forEach(function (prop) {
      Object.defineProperty(obj, prop, props[prop]);
    });
    return obj;
  };

我们得到相同的 console.log 未定义代码。

这是因为 Object.keys 函数。我在谷歌上搜索了一下,但没有找到是否允许这样做的任何地方。

最佳答案

I googled around and did not find in any place if this should be allowed or not.

您可以随时查看规范,在本例中为 § 19.1.2.3 Object.defineProperties(O, Properties) .

它使用 OwnPropertyKeys internal method ,它确实列出了对象的所有字符串和符号键。

This is because of the Object.keys function

正确。它应该是 Object.getOwnPropertyNames(props).concat(Object.getOwnPropertySymbols(props))。您可能想要提交 zone.js 的错误。然而,我确实想知道为什么在使用 ES6 符号时需要 ES5 Object.defineProperties 函数的 polyfill?

关于javascript - 将 Object.defineProperties 与符号一起使用是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36111582/

相关文章:

JavaScript - 导出硬编码数组与创建数组

linux -/proc/kallsyms 中标有 "T"的内核符号未导出

ruby - 什么时候不应该在 Ruby 中使用 to_sym?

javascript - 防止第三方调用内部 POST 方法

javascript - 如何隔离和提取常见的 axios 调用以防止代码重复?

javascript - 三元不会在 ng-repeat 和 ng-class 中的单个 div 上工作

typescript - 声明一个变量,有一个键是两种类型的串联

iphone - 重复符号问题

javascript - 如何使用折线和 openInfoWindowHtml 拍摄谷歌地图的快照

javascript - Select2 不适用于 JS 生成的元素