javascript学习(一)— 比较运算与strict模式
来源:互联网 发布:java中的数组声明 编辑:程序博客网 时间:2024/05/21 14:59
最近在重新学习javascript,发现了一些以前没发现的点。
学习javascript的网站:https://www.liaoxuefeng.com
1、比较运算符
JavaScript把null、undefined、0、NaN和空字符串”视为false,其他值一概视为true,
JavaScript允许对任意数据类型做比较
false == 0; // truefalse === 0; // false
要特别注意相等运算符==。JavaScript在设计时,有两种比较运算符:
第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。
另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true
最后要注意浮点数的相等比较:
1 / 3 === (1 - 2 / 3); // false
这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
2、strict模式
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:
i = 10; // i现在是全局变量
在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以调试的错误结果。
使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变量在不同的函数体内互不冲突。
为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误。
启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict';
这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。
来测试一下你的浏览器是否能支持strict模式:
'use strict';// 如果浏览器支持strict模式,// 下面的代码将报ReferenceError错误:abc = 'Hello, world';alert(abc);
运行代码,如果浏览器报错,请修复后再运行。如果浏览器不报错,说明你的浏览器太古老了,需要尽快升级。
不用var申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式。
- javascript学习(一)— 比较运算与strict模式
- JavaScript的strict模式与with关键字
- Javascript 严格模式(use strict)详解
- JavaScript严格模式(use strict)
- javascript 的 strict模式
- JavaScript的strict模式
- 'use strict' JavaScript严格模式
- javascript 严格模式 use strict
- JavaScript strict模式定义变量
- JavaScript 严格模式 - "strict mode"
- JavaScript: 严格模式(use strict)
- JavaScript 严格模式(use strict)
- 解密:JavaScript 模式(use strict)
- JavaScript 严格模式 use strict
- Javascript 严格模式use strict
- JavaScript代码的strict模式
- JavaScript 严格模式(use strict)
- JavaScript(一)--在比较中学习
- (笔记)Android获取相册图片并返回
- DFS简单题 杭电1241 POJ 1154
- 无法启动屏幕键盘
- 图片无缝向下滚动
- Android应用开发工程师技术栈
- javascript学习(一)— 比较运算与strict模式
- poll_server
- SpringMVC多视图解析器(jsp,html,title解析器)
- HDU 2874 LCA在线算法RMQ
- caffe(一): 利用自带MNIST例程训练手写字符识别模型
- epoll服务器---I/O多路转接之epoll
- JSON.parse()和JSON.stringify()
- linux ./config --prefix=
- LeetCode2:Add Two Numbers