了解 JavaScript 提升和truthy &虚假的
我之前读过有关 JavaScript 提升的内容。
Ben Cherry 的 JavaScript 作用域和提升
德米特里·索什尼科夫关于“提升”的两句话
以及一些有关 JavaScript 类型强制、真相和事实的更多信息错误测试: 其他一些资源
真相、平等和 JavaScript以及 在练习一些时,发现我缺少一些关于提升和变量“truthy &”的重要概念。虚假的。
进行“if”真值测试
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
1:使用重复变量声明o/p
:inside if
怀疑:“foo”值为“1”,if(!foo)
的计算结果应为 false
并且该块不应被执行(引用上述资源:提升仅影响 var
和 function
声明,但不执行)。但为什么会显示该警报。 如果我直接使用 false
(如下面的无技巧代码所示:代码片段 #3),情况就不是这样了
2: 'if' 真值测试,没有重复的变量声明
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
o/p: no输出;表示控件未进入“if”块
这是人们所期望的
3: 'if' 使用 'false' 和重复的变量声明
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p: 无输出;表示控件未进入“if”块
这是人们所期望的,
请有人澄清。谢谢
I've been reading about JavaScript hoisting sometime back.
JavaScript Scoping and Hoisting by Ben Cherry
Two words about “hoisting” by Dmitry Soshnikov
and, some more about JavaScript type-coercion, truth & false test:
Truth, Equality and JavaScript and some other resource
And while practicing some, and found I m missing some important concept about the hoisting and a variable' truthy & falsy.
1: 'if' truth test with duplicate variable declaration
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p: inside if
Doubt: 'foo' value being '1', if(!foo)
should evaluates to false
and that block should not be executed (quoting from above resources: hoisting affects only the var
& function
declaration, but not the execution). But why is that alert is shown.
This is not the case if I directly use false
(shown in the below no-tricks code: snippet #3)
2: 'if' truth test without duplicate variable declaration
var foo = 1;
function bar() {
if (!foo) {
alert('inside if');
}
}
bar();
o/p: no output; means control not entered 'if' block
This is what one could expect
3: 'if' using 'false' with duplicate variable declaration
var foo = 1;
function bar() {
if (false) {
alert('inside if');
var foo = 10;
}
}
bar();
o/p: no output; means control not entered 'if' block
This is what one could expect
Someone please clarify. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于示例 1,显示警报是因为您在函数内使用
var
并且var
声明被提升到函数的顶部,因此它是等效的to:人们可能会得出这样的结论:这类问题为在函数顶部显式声明所有变量提供了令人信服的理由。
For your example number 1, the alert is shown because you're using
var
inside the function and thevar
declaration is hoisted to the top of the function, so it is equivalent to:One might conclude that these sorts of issues offer compelling reason to declare all variables explicitly at the top of the function.
仅急切评估变量声明。第一种情况(在
if
块中)中的变量赋值仅在进入if
块时发生。您仅声明但未分配任何值的变量的值为
未定义
(强制为false
)。Only variable declaration is eagerly evaluated. The variable assignment in your first case (in the
if
block) occurs only upon entering theif
block.The variable you only declare, but not assign any value to, has the value of
undefined
(which coerces tofalse
).