繁体   English   中英

没有new关键字或.create方法的Object()

[英]Object() without the new keyword or .create method

我在MDN上寻找Array.prototype.includes()的polyfill,然后遇到以下Object()语法:

if (!Array.prototype.includes) {
   Array.prototype.includes = function(searchElement /*, fromIndex*/) {
'use strict';
if (this == null) {
  throw new TypeError('Array.prototype.includes called on null or undefined');
}
//This is the line in question
var O = Object(this);
var len = parseInt(O.length, 10) || 0;
if (len === 0) {
  return false;
}
var n = parseInt(arguments[1], 10) || 0;
var k;
if (n >= 0) {
  k = n;
} else {
  k = len + n;
  if (k < 0) {k = 0;}
}
var currentElement;
while (k < len) {
  currentElement = O[k];
  if (searchElement === currentElement ||
     (searchElement !== searchElement && currentElement !== currentElement)) { // NaN !== NaN
    return true;
  }
  k++;
}
  return false;
  };
}

在这种情况下,对象(对象)在做什么,目的是什么?

Object(...)将传递的值转换为对象。 如果它已经是一个对象,它将简单地返回值本身,否则wit将创建一个新对象并将其返回。

规格

当Object作为函数而不是构造函数调用时,它将执行类型转换。

例:

var obj = Object("foo");
// same as 
// var obj = new String("foo");

在这种情况下,这样做的目的是什么?

它确保该值是一个对象,而不是基元。 实现仅遵循规范

  1. 让O成为? ToObject(此值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM