如图,这个好像是个伪数组,但我打印他的length的时候却是显示0,用instanceof打印出既不是数组也不是对象了,我想拿这个“东西”里面的对象,却拿不出来,大佬们帮帮忙
如图,这个好像是个伪数组,但我打印他的length的时候却是显示0,用instanceof打印出既不是数组也不是对象了,我想拿这个“东西”里面的对象,却拿不出来,大佬们帮帮忙
没有代码看不出什么呀。。 首先你使用的console.log
是由浏览器来实现的,不同浏览器打印出来的信息可能行为是不一致的。也就是说你现在看到的值可能是之后异步更新的值。
那么你先使用console.log(JSON.parse(JSON.stringify(newArr)))
, 打印出真实的值出来。
数组本质上也是一个对象来着,我看__proto__
是Array
, 你再使用Array.isArray(newArr)
来判断是否是真的Array。
再或者说,这个值总更该有原始类型的吧,调用这个函数来获取原始类型:
function getBaseType(target) {
const typeStr = Object.prototype.toString
.call(target)
.toLocaleLowerCase();
return typeStr.slice(8, -1);
}
就是普通json数组,长度都写了是2,怎么可能拿不出? JSON.stringify(newArr[0])就拿到字符串了,你console.log(newArr[0])也是能打印出来的
其实你的场景可以理解为如下。其实问题很简单,console.log
打印出来只是一个快照,你点击的时候才去内存中取值。其实你打印的时候就是没值的呀。
newArr = []
console.log(newArr)
console.log(newArr instanceof Array)
console.log(newArr[0])
newArr[0] = 'lilnong.top';
console.log(newArr)
另一个问题,为什么instanceof
是false
,因为你做了隐式转换了呀。其实可以用console.log输出多个参数
贴一个运算符优先级吧,可以看到先加,后instanceof
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
你这个是异步获取的吧, 这个值暂时还没有你当然取不到, 你可以写个延时器 去执行取值