- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
范围:我一直在学习 java 脚本中的原型(prototype)继承
,并在我的网络浏览器中尝试了以下代码。在执行以下代码时,我发现了一些非常有趣的东西。
let animal = {
eats: true
};
let rabbit = {
jumps: true
};
const p=Object.create(rabbit)
rabbit.__proto__ = animal
let y=new Array(2,3)
console.log(Object.getPrototypeOf(y))
var val=y.find((b)=>(b==2));
console.log(val);
console.log(Array.isArray(y))
y.__proto__=rabbit
console.log(Array.isArray(y))
console.log(Object.getPrototypeOf(y))
var ccl=y.find((b)=>(b==2));
问题:我创建了一个数组并打印了它的原型(prototype),然后调用数组的 find 方法并使用 Array.isArray()
方法检查它是否是一个数组。然后我将 y 的原型(prototype)分配给 rabbit 对象
。
当我检查它是否仍然是一个数组时,我得到了 true,但是当调用 find 方法时我得到一个错误并且在检查原型(prototype)时没有数组的函数。
那么Array.isArray()
方法返回true的依据是什么。
输出:
[constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]at: ƒ at()concat: ƒ concat()constructor: ƒ Array()copyWithin: ƒ copyWithin()entries: ƒ entries()every: ƒ every()fill: ƒ fill()filter: ƒ filter()find: ƒ find()findIndex: ƒ findIndex()findLast: ƒ findLast()findLastIndex: ƒ findLastIndex()flat: ƒ flat()flatMap: ƒ flatMap()forEach: ƒ forEach()includes: ƒ includes()indexOf: ƒ indexOf()join: ƒ join()keys: ƒ keys()lastIndexOf: ƒ lastIndexOf()length: 0map: ƒ map()pop: ƒ pop()push: ƒ push()reduce: ƒ reduce()reduceRight: ƒ reduceRight()reverse: ƒ reverse()shift: ƒ shift()slice: ƒ slice()some: ƒ some()sort: ƒ sort()splice: ƒ splice()toLocaleString: ƒ toLocaleString()toString: ƒ toString()unshift: ƒ unshift()values: ƒ values()Symbol(Symbol.iterator): ƒ values()Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …}[[Prototype]]: Object
2
true
true
{jumps: true}jumps: true[[Prototype]]: Objecteats: true[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
Uncaught TypeError: y.find is not a function
at <anonymous>:17:11
最佳答案
取决于你问的是谁。
ECMAScript 2021 Language standard说:
7.2.2 IsArray ( argument )
The abstract operation
IsArray
takesargument
argument. It performs the following steps when called:
- If
Type(argument)
is notObject
, returnfalse
.- If argument is an
Array
exotic object, returntrue
.- If argument is a
Proxy
exotic object, then
a. Ifargument.[[ProxyHandler]]
isnull
, throw aTypeError
exception.
b. Lettarget
beargument.[[ProxyTarget]]
.
c. Return? IsArray(target)
.- Return
false
.
(针对此平台重新格式化)
了解内置 Javascript 对象具有引擎内部的表示可能会有所帮助。这就是上面的伪代码所指的。 Javascript 无法访问伪代码引用的某些内容,但引擎可以。
另一方面,Javascript 库通常根据库的历史、它们想要的健壮性或它们的目标是什么来做几件事中的一个。由于他们无法访问引擎内部,因此这些猜测在现实世界中很可能是正确的:
Array.isArray()
Object.prototype.toString.call(obj) === '[object Array]'
(我相信由 Mozilla 标准化)Boolean(obj) && obj.length != null && typeof obj.push === 'function'
Boolean(obj) && obj.constructor === Array
instanceof
基于:obj instanceof Array
这不是一个详尽的 list 。
关于javascript - Array.isArray() 方法如何检查数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72412420/
它们看起来是一样的。 在内部 jQuery 只是将它自己的 $.isArray 映射到原生的 Array.isArray。* 最佳答案 经过进一步调查,我发现 this commit他们用原生的 Ar
我刚刚注意到 Node.js v0.10.26 的 API 文档提供 util.isArray, util.isArray(object)# Returns true if the given "ob
我正在使用 Backbone 、requirejs 和 yeoman 构建一个应用程序。 我使用 Twitter 的 typeaheadjs 并随机收到此错误!大多数时候它可以工作,但有时提前输入甚至
我正在映射组件中配置文件中的某些项目,如果一个项目是一个数组,我想将数组中的每个值一起渲染。我正在使用 .isArray 来检查某个项目是否是数组,但它没有在我期望的时候返回值。 示例配置 items
范围:我一直在学习 java 脚本中的原型(prototype)继承,并在我的网络浏览器中尝试了以下代码。在执行以下代码时,我发现了一些非常有趣的东西。 let animal = { eats:
对于这个大量数据,我只想匹配数组字段。但我想要$match出项目。 这是数据样本: /* 1 */ { "_id" : ObjectId("5df8b596400289966e77e268")
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我正在尝试检查是否是p数组。我是想检查真实性还是我在哪里犯了错误。其实现在我正在学习jQuery.isArray 。我认为我的代码出错了,但我不知道在哪里。谢谢 var p = ['foo',''];
这是我的首页 {{items}} 这是我的 Controller app.controller('mainController', function($scop
这个问题在这里已经有了答案: How do I check if a variable is an array in JavaScript? (25 个答案) 关闭 9 年前。 我想检查一个变量是数
我很好奇为什么IE8会卡死 if (isArray(obj)) 这是我在 IE8 javascript 控制台中得到的: >>obj {...} >>typeof(obj) "object" >>Ob
我在玩 NG2,我正在寻找 angular.isArray 的等价物。 是的,我尝试用谷歌搜索但没有成功。我可能正在考虑这个问题。 我尝试在我的 ng2-app 中使用的方法是这样的: functio
IsArray 函数 返回 Boolean 值指明某变量是否为数组。 IsArray(varname) varname 参数可以是任意变量。 说明 如果变量是数组,IsArray 函数返回
我试图在 TypeScript 中做一个简单的数组检查,但显然它所做的是推断如果它不是一个数组(它实际上接受 any 类型作为参数),那么它必须是 never 类型。我很好奇这在 TypeScript
所以我一直在尝试调试我正在编写的物理引擎,对于多维空间 HashMap ,我需要分配一个二维数组。 为什么这段代码给我“无法读取未定义的属性‘push’”?我的 if 语句和我尝试推送到数组之间是否发
我正在浏览 polyfill MDN 上的 Array.isArray 方法,这是我发现的: if (!Array.isArray) { Array.isArray = function(arg)
我有一个关于 Java Reflections 的问题:我必须检查类的某个字段是否是数组。但我的问题是:如果我直接在类的属性上运行 isArray() ,它就可以工作。但是如果我按照下面的方式使用它,
我一直在用 Javascript 阅读: 一切都是对象(数字、字符串、 bool 值、null 和未定义等基本类型除外) 对象可以被视为关联数组。 根据我的结论,Array.isArray() 应该为
如何确定我的数据结构是 Map() 类型? 我到处找,没找到方法 我真的很想开始使用它们,因为我可以使用对象作为键! 最佳答案 您可以使用 instanceof 运营商 var map = new M
我是一名优秀的程序员,十分优秀!