微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么“ alert3> 2> 1”会警告“ false” [重复项]

如何解决为什么“ alert3> 2> 1”会警告“ false” [重复项]

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

如果添加括号以显示JavaScript如何解释它,它将变得更加清晰:
alert( (3 > 2) > 1 );
让我们分开。首先,它计算
3 > 2
。是的,三个大于两个。因此,您现在有了:
alert( true > 1 );
true
被强制为数字。这个数字恰好是
1
1 > 1
显然是错误的。因此,结果是:
alert( false );
    ,首先,
3>2
的计算结果为TRUE,可能会隐式转换为1,所以最后得到
1>1
,即FALSE。 您可能在这里想要一个错误,但是Javascript的类型非常弱,因此它将尝试进行隐式转换,而不会抱怨。 编辑: 因此,您在问为什么编程语言的语法并不总是与数学符号一致?我会说(1)它们具有不同的优先级,(2)对于编译器而言,以另一种方式进行更有意义。 但这并不少见: \“ x = 3 \”(声明)和
x = 3
(赋值) \“ x >> 1 \”(远远大于1)和
x >> 1
(位移) \“ a | b \”(a除以b)和
a | b
(按位或)。 清单继续...     ,它的评估方式如下:
+(3>2) > 1
与以下内容相同:
+(true) > 1
最终是:
1 > 1 = false
但是嘿,至少at15会起作用;)     ,让我们从根本上分解一下,它的两个>运算符具有相同的优先级,那么哪个先运行? JavaScript已分配了运算符优先级,根据从以下位置下载的运算符优先级表 MDN 大于(>)(表中的11)从左到右运行,因此3> 2首先运行,其结果为TRUE 所以现在我们有TRUE> 1 当JavaScript看到两种不同类型的值(此处为布尔值和数字)进行比较时,将发生类型强制,这意味着将TRUE(类型转换)强制为1, 因此JavaScript将以1> 1运行,结果为FALSE     ,请在下面找到答案:
3 > 2 > 1 === true;
>运算符的优先级比===高,并且是从左到右的关联。如果添加隐式括号,则会得到以下信息:
((3 > 2) > 1) === true;
这进一步评估为:
((3 > 2) > 1) === true;
(true > 1) === true;
false === true;
false;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。