javascript - JavaScript 中的 Object() 和 Object(value) 有什么用

标签 javascript

我在 Array.prototype.includes() 中偶然发现了这种用法填充代码:

var O = Object(this);

这个函数的语义是什么?也欢迎链接到文档。

最佳答案

Object constructor, when called as a function , 尝试将参数转换为对象,如下所示:

  • 如果参数已经是一个对象,则返回它。
  • 如果参数是对象可强制转换的( bool 值、数字、字符串或符号),它会将其强制转换为一个对象。
  • 如果参数为 null 或未定义,或未传递参数,则返回一个继承自 Object.prototype 的新普通对象。就像您使用 ({}) 一样。

例子:

var obj = [1,2,3], symb = Symbol();

// Object argument
Object(obj);    // obj;

// Object-coercible argument
Object(true);   // Boolean { [[BooleanData]]: true }
Object(1234);   // Number  { [[NumberData]]: 1234 }
Object("ab");   // String  { [[StringData]]: "ab", 0: "a", 1: "b", length: 2 }
Object(symb);   // Symbol  { [[SymbolData]]: symb }

// Non-object-coercible argument
Object(null);   // Object {  }
Object(void 0); // Object {  }
Object();       // Object {  }

polyfill 使用 Object(this) 因为规范说 Array.prototype.includes应该使用 ToObject ,但这是内部的东西,不会暴露给 JS 代码。

关于javascript - JavaScript 中的 Object() 和 Object(value) 有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799734/

相关文章:

javascript - 模板函数在 sap.m.Table 中不起作用

javascript - HTML5 Canvas : Same code outputs different results in different browsers

javascript - 按嵌套属性路径排序时的 Breeze 1.4.0 内联计数

javascript - React——使用 TypeScript vs Flow vs?

javascript - 无法从 VueJS 监听 Bootstrap 按钮组内的点击事件

javascript - 如果输入字段中至少有 n 个字母,如何配置 Google Places Autocomplete 仅执行请求?

javascript - 如何单独使用 sizzle.js

javascript - 尝试 "crossover"两个数组使用第一个数组的子集并尽可能保持第二个数组的顺序

javascript - 如果 async.jquery 中的响应为 null,则跳过迭代

javascript - 带有路由错误的 React-semantic-ui