JS,感觉好神奇的问题..求解啊
问题描述:
最近在学习JS.. 网上看了一个网站代码不着调啥意思.就趴下来本地看看学习..
但是不明白这段代码是如果运行的..
而且最开始需要先打印a .后面打印 b实参才有数据..否则打印的b为 undefined...奇怪的逻辑
这段代码在原来的地方是可以运行的..我这边只是将 a 变量缩短了.太长了. 但是不明白这里 b['push'] 和 b['shift'] ...
实参b应该是和 var a一样的啊..数组这样怎么取值没搞明白...对象才是这样取值的哇.
难道 JS 还有什么隐藏功能么?
<script>
var a = ['oeidD', 'bRnDx', 'prototype', ''+'eB', 'push', 'shift'] // 有很长很长..300+个值
// console.log(a); // 注释掉后
(function (b, c) {
console.log(b); // 上面注释掉后 打印的是 undefined..取消注释则正常打印
var d = function (e) {
console.log(e)
while (--e) {
b['push'](b['shift']()); // 这是什么用法? 这段理解不了.但是网站上可以运行,进死循环.. b 是一个数组的哇.
console.log(e)
}
};
d(++c);
}(a, 6));
</script>
答
你给var a加个结束加个分号就行了。这样就能正常运行了不管注不注释都行。原因的话应该就是没加分号当成一个整体了https://blog.csdn.net/weixin_45376220/article/details/97693306 这个说法我觉得是对的。至于b['push']这个会解析成push函数所以b['push'](b['shift']())就会删除最后一个。
var a = ['oeidD', 'bRnDx', 'prototype', ''+'eB', 'push', 'shift']; // 有很长很长..300+个值
a['']是一个对象取用技巧,比如你对象的key值是一个变量,这时候就得用这个了例如
let obj={
a:'bbb'
}
console.log(obj.a,obj['a']); //这两种都能取到值
//有的时候key值是一个变量
let key='a';
console.log(obj.key);//就是undefined
console.log(obj[key]); //这样就能取到