JavaScript基本数据类型(较易混淆的几个概念)
1. var a; typeof a; 控制台输出结果是什么?
解答:a只被声明,而未被初始化,在javascript中,未初始化的变量默认值都为undefined;
2. var s="1s";s++ 控制台输出结果是什么?
解答:s="1s"为字符串类型,如果字符串遇到算术运算符,可以强制转换为number类型,但是,1s无法转换成number,因而会转成NaN类型;
此时,s++相当于NaN类型加1,结果仍然是NaN;
备注:
假设,s="1";(此时,字符串1可以被转化成为number 1),然后 s++;
控制台应该先打印s的原始值,然后加1;
3. typeof -Infinity 控制台输出结果是什么?
解答: Infinity类型值虽然表示 正负无穷的意思,但它仍然是一个数,因而其类型一定是number;
4. 10%"0" 控制台输出结果是什么?
解答:a%b 代表的意思是a整除b余数是多少,因而b作为除数;
"0"遇到算术运算符%时自动转为数0,此时0作为除数,结果输出NaN;
5. undefined==null , undefined===null 控制台输出结果是什么?
false=="" , false==="" 控制台输出结果是什么?
解答:undefined==null (true) , false==""(true)
根据相等运算符定义,两边操作数会被自动转换为相同类型,然后进行比较;
这里,undefined和null的类型都是Object,但是至于为什么二者最终被判定为相等,我很疑惑。
false和""在比较之前,会先将""转换为布尔型,对应为false,因而等式两边都是false,值也相等;
至于,undefined===null 和false==="" 控制台都输出false
因为===代表的是等价运算,要求等式两边的操作数不仅要类型相同,而且要求数值相同才会返回true;
6. undefined和null的区别与联系
通常情况下,当我们试图访问某个不存在的或者未赋值的变量时,就会得到一个undefined值。JavaScript会自动将生命时没有进行初始化的变量设为undefined。
例如: >>> foo
foo is no defined; (或者,尽管声明了变量,但未初始化,改变量仍然被设为undefined)
而null值不能通过JavaScript来自动赋值,只能通过代码中赋值语句来完成。
例如: var somevar=null;
重要区别:null和undefined在被转换为其他基本类型时,方法存在一定的区别;
转换为数字:
>>> 1*undefined
NaN (说明undefined被转换为NaN类型)
>>> 1*null
0 (说明null被转换为0)
转换为布尔型:
>>> !!undefined
false
>>>!!null
false (说明在转换为布尔型值时二者表现一样)
转换为字符串:
>>> ""+null
"null"
>>> ""+ undefined
"undefined" (二者既有相同也有区别,相同的是都是将其类型和字符串拼接,不同的是二者类型不同)
7. var v=v||10; 控制台输出什么?
解答:首先,解释||(逻辑或)运算。只要||两边的操作数任一为true,则运算结果为true;
其次,解释惰性求值。在一个连续的逻辑操作中,操作结果在最后一个操作完成之前就已经明确了的话,那么该操作往往不必再继续执行了,因为这已经不会对最终结果产生任何影响。
例如, >>> true||false||true||false
true (在第一个true出现时,已经可以决定运算的结果,因而后续判断不再执行)
例2: >>> true||"something"
true (在判断逻辑或左边为true时,中断运算,输出true)
>>> "something"||true
"something"
>>> "something"||false
"something" (先将"something"转换为布尔型,判断其为true,中断运算,输出"something")
因而,var v=v||10;此时 v是undefined,转换为布尔型为false,仍需要判断逻辑或右边的10,10转换为布尔型为true,因而运算结果为10,并且10被赋值给v,控制台输出v等于10;
备注: 如果将v分别设置为100,0,null结果又将是什么?
测试1: var v=100; v=v||10;
输出结果 100;
测试2: var v=0; v=v||10;
输出结果 10;
测试3: var v=null; v=v||10;
输出结果 10;
上述例子证明了例2中的陈述;
JavaScript基本数据类型(较易混淆的几个概念)的更多相关文章
- JavaScript中易混淆的DOM属性及方法对比
JavaScript中易混淆的DOM属性及方法对比 ParentNode.children VS Node.prototype.childNodes ParentNode.children:该属性继承 ...
- 【C#小知识】C#中一些易混淆概念总结---------数据类型存储,方法调用,out和ref参数的使用
这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框架类库) 这些类是微软 ...
- JavaScript 进阶(五)易混淆概念null vs undefined, == vs ===, string vs String
先看一段代码 var foo = {} foo.a = null alert(foo.a == null) //true alert(foo.a === undefined) //false ...
- C#中一些易混淆概念总结
C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...
- a链接易混淆与form表单简易验证用法详解
链接可以说遍布互联网,比如你想提供一个可以跳转到百度首页的链接给网友,那么代码如下: <a href="http://www.baidu.com">百度一下,你就知道& ...
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
- 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
- 【C#小知识】C#中一些易混淆概念总结(五)---------继承 分类: C# 2014-02-06 22:05 1106人阅读 评论(0) 收藏
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
- 【C#小知识】C#中一些易混淆概念总结(五)---------深入解析C#继承
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
随机推荐
- DNS解析流程
DNS简单来说就是进行域名和IP的转换,那该如何转换呢?既然要转换,肯定有转换表,那表应该存 哪个服务器上,怎样去请求域名服务器来进行转换,所以,这个转换的过程都是什么.而面试的时 经常会有这道题:当 ...
- CSS3 媒体查询移动设备尺寸 Media Queries for Standard Devices (包括 苹果手表 apple watch)
/* ----------- iPhone 4 and 4S ----------- */ /* Portrait and Landscape */ @media only screen and (m ...
- ueditor的模板功能
~~项目临时发现kindeditor比ueditor更好用~~ 不过还是回来把ueditor的学习,加一个书签标明一下阶段. 下面写一下ueditor的模板功能,即修改模板,使ueditor自动生成想 ...
- target-densitydpi
一个屏幕像素密度是由屏幕分辨率决定的,通常定义为每英寸点的数量(dpi).Android支持三种屏幕像素密度:低像素密度,中像素密度,高像素密度.一个低像素密度的屏幕每英寸上的像素点更少,而一个高像素 ...
- Linux系统下Nginx安装详解
该随笔为个人原创,后期会根据项目实践实时更新,如若转载,请注明出处,方便大家获得最新博文! 注:安装Nginx需要Linux系统已经安装 openssl-fips-2.0.2.tar.gz zli ...
- JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码
近期,经常有人问 JMeter 3.0 使用时,生成的 HTML 报告图表中的中文乱码问题.在此,简略的说一下解决的方法. 编码相关信息如下: 1.查看控制 csv.xml 等配置结果文件生成.读取的 ...
- 一个简单的js实现倒计时函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 日志管理-Log4net
引言 log4net库是Apache log4j框架在Micorsoft.NET平台的实现,是一个帮组程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.(百度百科) 实际项目中使用log ...
- ISO8583报文协议
最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等.在各个计算机设备之间,需要交换数据.我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有 ...
- LoadRunner调用Oracle存储过程
为了测试这个存储过程,我遥了一圈去做这个事情,这里说一下我自己接受到任务和自己开始是怎么想的. 方法一: 一开始我想着可以使用C#直接去调用存储过程,然后用Loadrunner调用C#的dll去测试, ...