`

JavaScript 的怪癖 3:标准的等号 (==)

 
阅读更多

原文:JavaScript quirk 3: normal equality (==)

译文:JavaScript 的怪癖 3:标准的等号 (==)

译者:iranw

此文是 javascript 的 12 个怪癖(quirks) 系列的第三篇。

让我们先看一个简单的例子: 由于一般的等于符号 ==、!=经常会出现问题,以至于我们不得不使用严格等于(===、!==)。 当然有人说这些规则也有例外,我不同意这个观点[2]。 怀揣的这个问题,我们现在就来看一下这个奇怪的现象:== 是不必要。

这个“正常”的等号(==)有很多怪癖。 虽然他很宽容(非严格比较),当与真值或者假值比较时,它会忽略类型(详见怪癖1):

> 0 == false  // OK
true
> 1 == true  // OK
true
> 2 == true  // not OK
false

> '' == false  // OK
true
> '1' == true  // OK
true
> '2' == true  // not OK
false

除了这些,我们设置可以把那些明显不能比较的值进行比较(我勒个去~~比较的结果居然还是 true):

> '' == 0
true
> '\n  123  \t' == 123
true

最后一次比较返回是 true,因为在 javascript 中把字符串转换数字类型时,会过滤掉首尾空白字符。 如果你仍然对关于 == 怎么工作感兴趣,你可以读读这篇文章。 对于严格比较符(===),不同类型的值比较是不相等的 [1]。也就是说试用严格比较符号,上诉的问题都不复存在。

参考文献:

  1. Equality in JavaScript: === versus ==

  2. When is it OK to use == in JavaScript?

分享到:
评论

相关推荐

    Javascript: SQL <==> Java String 互转

    NULL 博文链接:https://kavinhub.iteye.com/blog/2097772

    javascript的测试题两份

    15、分析javascript代码段,输出结果是: B  var a="125.8765"; c=parseInt(a); d=parseFloat(a); document.write(c+"&nbsp;&nbsp;"+d) A) 125.8765 126 B) 125 125.8765 C) 125.8765 125 D) 126 125.8765

    JavaScript基础到高级:仅使用===> Jhankar Mahbub学习源代码

    JavaScript基础到高级:仅使用===&gt; Jhankar Mahbub学习源代码

    JavaScript入门常见问题解决方案简介.docx

    const arr = [1, 2, 3]; arr.forEach((item, index) =&gt; { console.log(item, index); }); 使用for...of循环: Javascript for (let item of arr) { console.log(item); } 条件简写 使用三元运算符: Javascript ...

    用javascript地址栏显示源码

    用javascript地址栏显示源码: javascript:s=document.documentElement.outerHTML;document.write('&lt;body&gt;&lt;/body&gt;');document.body.innerText=s;

    JavaScript-Equality-Table:(== vs ===)

    Difference Between ( == vs === ) In Javascript 目前正在开发中!! :-灵感来自于:-https:

    webpy blog源代码

    util.js Javascript工具模块 使用方法: ======== 在命令行下输入如下命令: python blog.py 127.0.0.1:2010 即可启动web服务,主机ip地址为:127.0.0.1,端口为:2010。 打开浏览器,在地址栏中输入:...

    【JavaScript源代码】JavaScriptTypeScript 实现并发请求控制的示例代码.docx

    JavaScriptTypeScript 实现并发请求控制的示例代码  假设有 10 个请求,但是最大的并发数目是 5 个,并且要求拿到请求结果,这样就是一个简单的并发请求控制  利用 setTimeout 实行简单模仿一个请求  let ...

    javascript:void(0);

    javascript:void(0);

    浅析Javascript中双等号(==)隐性转换机制

    在Javascript中判断相等关系有双等号(==)和三等号(===)两种。其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否完全相等)。 因此有几个常识知识: 1、对于string,number等基础类型,==和===是有区别...

    JavaScript中三个等号和两个等号的区别(== 和 ===)浅析

    javascript中比较运算符'=='与'==='可能大家用的比较多,但是大家对他的区别不是很清楚,接下来小编给大家介绍下js中三个等号和两个等号的区别(== 和 ===),感兴趣的朋友可以参考下

    react-observable:类型 ReactObservableComponent = (props

    React可观察 类型 ReactObservableComponent = (props: 混合) =&gt; Observable

    页面时间控件(DotNet版).Net版

    &lt;script language="JavaScript" type="text/javascript" src="js/dateTimePicker.js"&gt; &lt;form id="form1" runat="server"&gt; 从&lt;asp:TextBox ID="tb_startDate" runat="server" onclick="setday(this)" &gt;&lt;/asp:...

    js数组说明大全

    对javascript中数组的使用比较完善的说明

    dtcms常用操作文档

    新闻浏览次数:&lt;script type="text/javascript" src="{config.webpath}tools/submit_ajax.ashx?action=view_article_click&id={model.id}&click=1"&gt;&lt;/script&gt; 新闻评论人数:&lt;script type="text/javascript" src="{...

    js连接百度流量分析

    &lt;script type="text/javascript"&gt; ...document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3Fa9ff42fc1c749897f64cadc5feb43920' type='text/javascript'%3E%3C/script%3E")); &lt;/script&gt;

    asp产品展示网页生成.rar

    功能说明: ============================= 1、产品栏目二级分类,随意添加修改。 2、采用eWebEditor编辑器,功能强大,支持图片、附件上传... &lt;script language="javascript" src="news/dy.asp"&gt;&lt;/script&gt; 调用全部产品

    javaScript计算器

    ==javaScript 计算器 function getResult(type){ if(checkData(type)==false){ return ; } var num1=parseFloat(document.jisuanqi.num1.value); var num2=parseFloat(document.jisuanqi.num2.value); ...

    手机后台DEMO

    比如你的INPUT是:&lt;input type="text" name="userName"&gt;那么你在里边加入:onKeypress="javascript:if(event.keyCode == 32)event.returnValue = false;"成为:&lt;input type="text" name="userName" onKeypress=...

Global site tag (gtag.js) - Google Analytics