我正在读一本关于JavaScript的书,名为Eloquent JavaScript。以下是该书的摘录:
“在JavaScript中访问属性的两种主要方法是用点和方括号。value.x和value [x]都访问value的属性,但不一定是相同的属性。区别在于x的解释方式。使用点时,点后的单词是属性的字面名称;使用方括号时,将计算括号之间的表达式以获取属性名称。而value.x获取名为“ x”的属性, “ value [x]尝试对表达式x求值,并使用转换为字符串的结果作为属性名称。”
在玩弄这些信息时,我碰巧尝试了这段代码。它返回数组第一个索引处的值。为什么这样?
arr = [1,2,3];
len = "length";
console.log(arr[len]);
Run Code Online (Sandbox Code Playgroud)
//输出为预期的“ 3”
arr = [1,2,3];
console.log(arr.length);
Run Code Online (Sandbox Code Playgroud)
//预期输出为“ 3”
arr = [1,2,3];
len = "length";
console.log(arr[length]);
Run Code Online (Sandbox Code Playgroud)
//输出为“ 1”
//由于JS是一种灵活的语言,所以我期望的输出是错误或至少为值“ 3”。
我似乎无法解决这个问题,继承人我拥有的......
vid1=0;
vid2=0;
vid3=0;
num=1;
'vid'+num = 1;
// vid1=1;
Run Code Online (Sandbox Code Playgroud)
我想基于数字创建变量,因此如果数字是2,则通过名称vid2创建变量并将其设置为1.
PS:这是我第一次在stackoverflow上,很抱歉,如果我在这个网站上的传统方面犯了任何错误=)并且比较先进.
以下程序中使用的函数....为什么我们在函数mopen('m1')中使用单引号而不是mopen(m1)
<ul id="sddm">
<div id="m1" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
<a href="#">HTML DropDown</a>
<a href="#">DHTML DropDown menu</a>
<a href="#">JavaScript DropDown</a>
<a href="#">DropDown Menu</a>
<a href="#">CSS DropDown</a>
</div>
</li>
<li>
<a href="#" onmouseover="mopen('m1')" onmouseout="mclosetime()">Home</a>
Run Code Online (Sandbox Code Playgroud) 我在HTML中的脚本标记中初始化了一些全局变量:
<script>
count = 0;
window.count2 = 0;
var count3 = 0;
</script>
Run Code Online (Sandbox Code Playgroud)
在app.js,我订阅观察他们的变化:
let subscription = bindingEngine.propertyObserver(window, 'count')
.subscribe((newValue, oldValue) => console.log('Global count: ', newValue, oldValue));
let subscription2 = bindingEngine.propertyObserver(window, 'count2')
.subscribe((newValue, oldValue) => console.log('window.count2: ', newValue, oldValue));
let subscription3 = bindingEngine.propertyObserver(window, 'count3')
.subscribe((newValue, oldValue) => console.log('Global count3: ', newValue, oldValue));
Run Code Online (Sandbox Code Playgroud)
然后我改变这样的值:
change() {
count++;
count2++;
count3++;
}
Run Code Online (Sandbox Code Playgroud)
只有count&& count2在控制台中被观察到:
Global count: 1 0
window.count2: 1 0
Run Code Online (Sandbox Code Playgroud)
这是GistRun
问题:为什么count3不能观察到?我认为3种形式的初始化是等价的.