- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很多人可能会觉得我的心理障碍很奇怪,但我担心如果我现在不解决这个问题,它会给我带来巨大的问题。
来自 MDN:http://api.jquery.com/Types/#String
var x = ""; // so x inits to false
if ( x ) {
console.log( "x defaulted to true" );
} else {
console.log( "x defaulted to false" );
}
// x defaulted to false
因此,x 作为空字符串会将 x 初始化为值 FALSE。简单。
代码返回“x 默认为 false”。即 if 条件解析为 false,因此返回第二条语句。
我需要一些类比来理解这一点。在我的脑海里我想:“如果(某些条件为真),即“是的,X 确实为假是正确的(真)”,则返回适当的回复。
由于 x 确实为 FALSE,所以这不应该返回 true 吗?为什么不呢?
作为测试,我将x 设置为 false 并检查 if 语句以查看 x 是否确实为 false。然而,在这种情况下,它返回 TRUE,即 TRUE,X 确实是 false。
var x = false;
if ( x === false ) {
console.log( "x defaulted to true" );
} else {
console.log( "x defaulted to false" );
}
// x defaulted to true
为什么第一个案例没有做同样的事情?在这两种情况下 x 的值都是 false。这一直让我绊倒。
最佳答案
在第一种情况下,你说的是
if (x) ...
这与“如果 x 为真”相同...
在你的例子中,x
等于一个空字符串,这在javascript中是错误的。因此,您正在点击 else
。显然,在第二个示例中,您设置 x = false,然后询问“x 是假吗?” - 答案是“是,x 为假”或true
,这就是执行第一个条件的原因。
if/else 解析后执行的代码与条件的真假无关。您可以控制台记录“x 默认为香蕉”,以便所有 javascript(或任何语言)都关心。
编辑 - 为了更加清晰,如果您希望发布的第二个代码片段点击else
,请将其更改为if (x)
就像你的第一个片段一样。由于 false
是 falsey - 它会按照您的预期运行。
tl;博士
var x = false;
x === false // this is true
x // this is false
关于javascript - 可能会破坏我 Javascript 职业生涯的基本 boolean 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639289/
我是一名优秀的程序员,十分优秀!