javascript - 你能用用户定义的对象伪造 Array.isArray() 吗?

标签 javascript

我很好奇是否有任何方法可以用用户定义的对象伪造出 Array.isArray()

摘自《JavaScript 模式》一书:

Array.isArray([]); // true

// trying to fool the check
// with an array-like object
Array.isArray({
  length: 1,
  "0": 1,
  slice: function () {}
}); // false

那个对象显然失败了,但是还有其他方法吗?这纯粹是出于好奇,并不是因为我认为您可以在常规客户端代码中搞砸 .isArray()(尽管知道如果可以的话显然会很棒!)。

最佳答案

仅当您设置 internal [[Class]] property"Array",这是不可能的 afaik。来自specification :

The isArray function takes one argument arg, and returns the Boolean value true if the argument is an object whose class internal property is "Array"; otherwise it returns false.

或者你反过来:创建一个普通数组并将每个数组方法显式设置为 undefined

关于javascript - 你能用用户定义的对象伪造 Array.isArray() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8672038/

相关文章:

javascript - 如何在 jQuery 插件中编写回调处理函数

javascript - 使用 for-of 更新数组对象

javascript - React CSSTransitionGroup 不应用类

javascript - AngularJS ui-utils ui.scroll 不显示结果

javascript - 如何更改导航栏中的当前链接颜色

javascript - 在 Google Chrome for Android 上调用 Javascript Notification API 不能直接从网页工作

javascript - 使用 React 和 Axios 更新 Firebase 中的数据

javascript - 仅从表格中选择所有复选框,而不是其他复选框

javascript - 如何自动补全文本区域中从 javascript/jquery 中的第三个单词开始的每一行?

javascript - 如何在 Javascript 中设置隐式对象响应