js中关于假值和空数组的总结
先上x==y运算符的算法细节:
- 如果
x不是正常值(比如抛出一个错误),中断执行。- 如果
y不是正常值,中断执行。- 如果
Type(x)与Type(y)相同,执行严格相等运算x === y。- 如果
x是null,y是undefined,返回true。- 如果
x是undefined,y是null,返回true。- 如果
Type(x)是数值,Type(y)是字符串,返回x == ToNumber(y)的结果。- 如果
Type(x)是字符串,Type(y)是数值,返回ToNumber(x) == y的结果。- 如果
Type(x)是布尔值,返回ToNumber(x) == y的结果。- 如果
Type(y)是布尔值,返回x == ToNumber(y)的结果。- 如果
Type(x)是字符串或数值或Symbol值,Type(y)是对象,返回x == ToPrimitive(y)的结果。- 如果
Type(x)是对象,Type(y)是字符串或数值或Symbol值,返回ToPrimitive(x) == y的结果。- 返回
false。
1、“假值”总共只有6个:
false,undefined,null,0,""(空字符串),NaN
除此之外的所有值,都是“真值”,即在逻辑判断中可以当true来使用
用代码表示:
if(false&&undefined&&null&&0&&""&&NaN){
console.log('其中有真值');
}else{
console.log('全部都是假值');
}
//全部都是假值
2、对于空数组和空对象的疑惑
疑惑来源:用空数组和空对象进行if语句判断为true,但是空数组和true进行==运算时,返回的是false
用代码表示:
if([]){
console.log('空数组转化为布尔值为true');//空数组转化为布尔值为true
}
if({}){
console.log('空对象转化为布尔值为true');//空对象转化为布尔值为true
}
if([]==true){
console.log('空数组等于true');
}else{
console.log('空数组等于false');//空数组等于false
}
为什么空数组转化为布尔值是true,而下面和true做对比时又不等于true呢?
原因分析:if ([ ]) {} 里发生自动类型转换,[ ] => Boolean,从object到布尔型,结果是true。事实上,所有的object转型到Boolean,都是true,[ ]和{ }都是对象。
[ ] == true 里不发生自动类型转换,这条语句只比较左右的“值”是否相等,所以要先化为number类型,true转化为数字1就不用说了,主要分析一下[ ]怎么转化为0的,这里涉及到ToPrimitive方法的操作,不懂的可以先看我的另一篇博客,https://i.cnblogs.com/EditPosts.aspx?postid=10859000,再返回看。[ ]会先调用valueOf方法,返回数组本身不是原始值,所以继续调用toString方法,返回' ',从而Number(' ')=0,而0!=1,所以返回false。
总结:Boolean([ ]) => true;//直接作条件
Boolean(Number([ ])) => false;//当与布尔值做比较时
Number({ })//NaN,不等于任何数包括自己
最后送大家一张经典的图:

js中关于假值和空数组的总结的更多相关文章
- JS中几种常见的数组算法(前端面试必看)
JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...
- js中如何访问对象和数组
js中如何访问对象和数组 一.总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 对象 . [] 数组 [] 1.js访问对象的两种方式? . [] 可以使用下面两种方式访问对象的属性和 ...
- Js中常用的字符串,数组,函数扩展
由于最近辞职在家,自己的时间相对多一点.所以就根据prototytpeJS的API,结合自己正在看的司徒大神的<javascript框架设计>,整理了下Js中常用一些字符串,数组,函数扩展 ...
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- JS中的唯一容器:数组
JS中的唯一容器:数组 一.什么类型的数据都可以存储 二. 定义的方式有两种 1 . var arra=[];var arra=[“a”,“b”,"c"]; 2.v ...
- JS中split使用方法和数组中元素的删除
JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...
- Js中的假值_ES5中定义的ToBoolean方法强制类型转换后值为false
你不知道的Javascript(中)--ToBoolean javascript中的值可以分为以下两类: 1.可以被强制类型转换为false的值 2.其他(被强制类型转换为true的值) 假值---以 ...
- js中split()方法得到的数组长度
js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...
- js中的节点遍历+类数组对象
firstChild 第一个子元素 lastChild 最后一个子元素 childNodes[n] = childNodes.item(n) 第n+1个子元素 parentNode ...
随机推荐
- [转]Using the HTML5 and jQuery UI Datepicker Popup Calendar with ASP.NET MVC - Part 4
本文转自:http://www.asp.net/mvc/overview/older-versions/using-the-html5-and-jquery-ui-datepicker-popup-c ...
- 使用require.js
requirejs使用入门 什么是requirejs? RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签的脚本加载步骤.可以用它来加速.优化代码,但其主要 ...
- js循环里进行回调,引用循环里的变量,发现只是最后值的问题
做项目的时候,栽在一个小地方,是这样的 我有很多个坐标点,我想把这些坐标点都绑定一个事件,当点击了这个坐标点之后,发送一个ajax 请求,将坐标点的id 发出去,等待显示返回的数据 但是实际当中,无论 ...
- http学习总结及思考
针对前面几章的学习,加上在学长的指导下,希望对前面知识进行简单总结. 1.在报文的7个方法中,最常用的是:Head和Post 响应头:If-Modified-Since HEAD -> 服务器返 ...
- SolrCloud的搭建的连接
1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud.当一个系统的索引数据量少的时候是不需 ...
- HDU 4009——Transfer water——————【最小树形图、不定根】
Transfer water Time Limit:3000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64u Subm ...
- ubuntu 下安装配置LAMP
详情见: http://www.linuxeden.com/html/softuse/20130731/141934.html
- Controller的使用
- HTML知识点梳理
- 4.JavaScript
1.简介 JavaScript 是一种轻量级的编程语言,是一种动态类型.弱类型.基于原型的脚本语言. JavaScript,通常缩写为JS,是一种高级的,解释执行的编程语言.JavaScript是一门 ...