咋JS中,下面这些值表示 “假”:

"" (empty string)

0,-0,NaN (invalid number)

null, undefined

false

除了上面这些在“假”值名单中的其他任何值都是“真”的,这里是一些例子:

"hello"

41

true

[],[1,"2",3] (arrays)

{}, {a: 42} (objects)

function foo() { .. } (functions)

== 检测值是否相等的时候,允许发生转换(隐式转换)

===检测值的时候则不允许发生转换, 所以 ===被称为“严格相等”

所以:

== 非严格相等中发生的隐式转换

=== 严格相等

var a = "42";

var b = 42;

a == b  // true

a === b  //false

在JS中,有人不建议使用==,这里有一些总结的规则,来说明何时要避免使用==,何时可以放心的使用==

. 如果比较的两个值可能是 true 或者 false, 避免使用 ==

. 如果比较的两个值是这些特定值(0, "", [] --- 空数组), 避免使用 ==

. 所有其他情况下,你都可以放心使用==, 它不但安全,而且可以提高可读性来简化代码

最大的原则: 如果你对这些值很确定,那使用 == 就是安全的,就可以使用

如果你对这些值不太确定,那就使用 ===

eg: 默认情况下 array数组转为string字符串,就是简单地把所以值通过逗号(,)连接在一起。你可能以为两个拥有相同内容的array是相等的, 但是实际上并不是这样

var a = [1,2,3];

var b = [1,2,3];

var c = "1,2,3";

a == c; //true

b == c; //true

a == b; //false

不等

在JavaScript中,string值也能被用于不等比较,使用的是字母表规则  ("bar" < "foo")

注意与(“==”和“===”) 不同的是, 不等运算符没有 “严格不等” 运算符

var a = 35;
var b = "36";
var c = "37";
a < b; //true
b < c; //true

不同类型的值比较中, 有个特别坑的情况:

var a = 35;
var b = "test";
a < b; //false
a > b; //false
a == b; //false

在 < 和 > 比较中,b被强制转换成"无效的数字"NaN, ES规范中,NaN既不大于也不小于其他任何值.

JavaScript中的真和假,==和===, 不等的更多相关文章

  1. 真与假与c#,java中的不同之处

    /************真与假************/ /*C语言中:真(非0).假(0) * Java.C#中:真(true).假(false) * JavaScript中:真(非0.true. ...

  2. JavaScript基本概念C - 真与假

    真与假 与 c 和 c++ 非常相似, 但与 Java 不同, JS中被认为true或false范围很广.所有对象 (空字符串除外) 和非零数字都被视为 true.空字符串.零.null 和undef ...

  3. 深入理解JavaScript中的==运算符

    原文章地址 在详细介绍图1中的每个部分前,我们来复习一下JS中关于类型的知识: JS中的值有两种类型:基本类型.对象类型. 基本类型包括:Undefined.Null.Boolean.Number和S ...

  4. javascript 中的 true 或 false

    JavaScript中奇葩的假值 通常在以下语句结构中需要判断真假 if分支语句 while循环语句 for里的第二个语句 如 1 2 3 4 5 6 7 if (boo) { // do somet ...

  5. JavaScript中奇葩的假值

    通常在以下语句结构中需要判断真假 if分支语句 while循环语句 for里的第二个语句 如 if (boo) { // do something } while (boo) { // do some ...

  6. JavaScript中一些你不一定知道的问题(持续更新中。。。。)

    一些js的问题与解析 1) ["1","2","3"].map(parseInt);的运行结果是? A.["1",&qu ...

  7. javascript中typeof与instanceof的区别

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...

  8. JavaScript中字符串类型

    字符串类型 字符串介绍 这是程序里面使用最为广泛的一-种类型.在JavaScript里面, 可以使用单引号,也可以使用双引号: 字符串这种数据类型非常霸道,它和其他数据类型相加都会被转换后才为字符串类 ...

  9. Jquery中$(document).ready() 和 JavaScript中的window.onload方法 比较

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的.   1.执行时间 win ...

随机推荐

  1. sass表达式前后出现空格

    最近发现一个问题,当我用mixin将px转rem时: @mixin pxToRem($remVal: 1){ font-size: ($remVal/75)rem; }.a { @include px ...

  2. X-Scan扫描端口80,443提示http TRACE 跨站攻击漏洞解决办法

    在用X-Scan-v3.3扫描主机端口提示http TRACE 跨站攻击漏洞; 一,修改配置文件httpd.conf 1.1 apache下面修改httpd.conf文件,在文件最后面新建一行加入:T ...

  3. NetBeans字体设置

    01.找到自己java字体目录.我的目录是[C:\Program Files\Java\jdk1.7.0_21\jre\lib] 02.复制fontconfig.properties.src, 重命名 ...

  4. hadoop集群增加新节点

    上次hadoop集群一块数据盘报警, 提交工单后维修人员更换硬盘 服务器是dell r720的, 8盘位, 蛋疼的是这些硬盘都是做的单盘raid1,维修人员说必须关机导入硬盘才能正常使用 (服务器就这 ...

  5. pathinfo()的用法

    pathinfo() 返回一个关联数组包含有 path 的信息. 包括以下的数组元素: [dirname] [basename] [extension] 提示和注释 注释:如果不是要求取得所有单元,则 ...

  6. 【转】BNF和EBNF的含义与用法

    [转]BNF和EBNF的含义与用法   BNF 和EBNF的含义与用法 1简介       关于本文       什么是BNF?工作原理       基本原理       一个实例 EBNF及其用途  ...

  7. 用一句SQL取出第 m 条到第 n 条记录的方法

    1 --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)2 3 SELECT TOP n-m+1 * 4 FROM Table 5 WHERE (id NOT IN (SEL ...

  8. STL list链表的用法详解

    本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函 ...

  9. 快速构建hibernate框架

    手动配置Hibernate框架的配置,极易出现问题,在Eclipse的web项目中,我们可以快速配置,方便快捷 一.导入Hibernate框架所需要的jar文件 二. 窗口—Perspective—打 ...

  10. [原创]Java开发在线编辑Word同时实现全文检索

    一.背景介绍 Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是 ...