JavaScript学习笔记——js变量的布尔值

typeof(1): number
typeof(NaN): number
typeof(Number.MIN_VALUE): number
typeof(Infinity): number
typeof("123"): string
typeof(true): boolean
typeof(window): object
typeof(Array()): object
typeof(function(){}): function
typeof(document): object
typeof(null): object
typeof(eval): function
typeof(Date): function
typeof(sss): undefined
typeof(undefined): undefined

所有的对象都被当作 true。
当且仅当字符串为空时,该字符串被当false。
null 和 undefined 被当作 false。
当且仅当数字为零时,该数字被当作 false。

.想到一个好玩的,运行如下 javascript :
  if (‘0‘) alert("‘0‘ is true");
  if (‘0‘ == false) alert("‘0‘ is false");结果是,两次都 alert 了!那么 ‘0‘ 到底是 true 还是 false 呢?

答案是:在js做比较的时候,有这样的三条规则:

如果比较的两者中有bool,会把 bool 先转换为对应的 number,即 0 和 1
如果比较的双方中有一方为number一方为string,会把string转换为数字
把string直接转换为bool的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true

在第一次比较的时候,直接把 ‘0‘ 放在 if 的表达式中,相当于直接把 string 转换为 bool, !!‘0‘ === true,所以是成立的
在第二次比较的时候,会先把 false 转换为 0,然后把 ‘0‘ 转换为 0, 左右两边都是0,于是也是成立的。
所以归根到底这是一个javascript中做比较的时候类型转换顺序的问题,个人觉得还是不是很合理的,不同的转换顺序得到的结果会不一样

JavaScript学习笔记——js变量的布尔值

时间: 2024-10-21 23:49:37

JavaScript学习笔记——js变量的布尔值的相关文章

原生 javascript 学习之 js变量

1.变量的命名 方法的命名(驼峰命名法) 全部小写 : 单词与单词之间全部下划线 (my_namespace) 大小写混合 : 第一个单词首字母小写其他单词首字母大写. 规则 首字符 英文字母或下划线 组成   英文字母 数字 下划线 禁忌   JavaScript 关键字 保留字 2. 变量的声明 显示声明   :  var 关键字 陋习         :  没有类型 重复声明 隐式声明 不声明直接赋值 正解        : 先声明 后读写 先赋值 后运算 3. 变量类型 值类型 A) 占

JAVAscript学习笔记 js句柄监听事件 第四节 (原创) 参考js使用表

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>句柄添加监听事件</title> <script type="text/javascript" src="tzy.js"></script> </head> <body>

JavaScript学习笔记—— 4. 变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,其中基本类型值是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象: 对于5种基本类型数据:undefined, null,boolean,number和string,采用按值访问,因为可以操作保存在变量中的实际的值: 对于引用类型的值而言,JavaScript并不能直接访问内存中的位置,也就是说不能直接操作对象的内存空间,在操作对象时,实际上是在操作对象的引用而非实际的对象. 在从一个变量向另一个变量复制基本

JAVAscript学习笔记 js条件语句 第三节 (原创) 参考js使用表 (2017-09-14 15:55)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>语句</title> <script> var i = 9;//修改i值 if (i > 10) { document.write("我大于10"+"</br>"); } else if

javascript 学习笔记 -- js获取本地文件信息

JavaScript是跑在浏览器中,所以对于JavaScript读取本地文件不想c++ 和 java那样easy.网上有很多关于读取本地文件的方法,许多是用ActiveXObject控件.ActiveXObject是微软特有的,只能在IE内核的浏览器中运行,所以也不是一个好方法. 这里,介绍一种用Xml读取本地文件的方法. 第一步: Ngnix 服务器配置 下载ngnix(http://nginx.org/en/download.html), 解压缩之后,打开nginx\conf\nginx.c

JAVAscript学习笔记 js异常 第二节 (原创) 参考js使用表

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>异常处理</title> <script> function demo() { try { alert(str);//str为空 }catch(err){ alert(err); } } demo(); function demo1(){ var

JAVAscript学习笔记 js事件 第一节 (原创) 参考js使用表

<!DOCTYPE html> <html lang="en" onUnload="ud()"> <head> <meta charset="UTF-8"> <title>Title</title> <script> function demo() { alert("hello"); } function onOver(ooj) { ooj.i

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde