【JavaScript】细节问题
JavaScript
1.计算之中经常出现的一些问题:
(该情况适用于Python等其他程序设计语言)
浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。
1 / 3 === (1 - 2 / 3); // false
要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
2.比较运算符:
JavaScript在设计时,有两种比较运算符:
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==
比较,始终坚持使用===
比较。
另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true
3.strict模式:
由于JavaScript设计之初并没有强制要求使用var
声明新的变量,然而不通过var
声明的变量直接使用会被当作全局变量(为了修补JavaScript这一严重设计缺陷,ECMAScript在后续规范中推出了strict模式),这对之后的开发会带来非常打的困扰。因此我们需要strict模式,启用该模式的方法是在JavaScript代码的第一行写上:
'use strict';
这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。
'use strict';
// 如果浏览器支持strict模式,
// 下面的代码将报ReferenceError错误:
abc = 'Hello, world';
console.log(abc);
避免开发中带来的一些麻烦,建议一直使用strict模式编写JavaScript代码。
4.多行字符串
由于\n
使用起来比较复杂,在最新的ES6标准中,新增了新的多行字符串的表示方法:·……·(反引号,位置在键盘的数字键1左边,ESC键的下方)
支持ES6标准的浏览器对于下面的代码能够正常运行:
console.log(`多行
字符串
测试`
);
5.字符串${}
占位符的使用
对于字符串,可以使用+
对不同的字符串进行连接操作,但是对于需要多次使用的字符串,使用+
太过于麻烦,这就需要使用字符串占位符${}
进行操作。
var name = ‘雨下一整晚real’;
console,log("您好,${name}");
5.操作字符串方法
在操作字符串时,可能会使用到下面的一些方法:
toUpperCase() //把一个字符串全部变为大写
toLowerCase() //把一个字符串全部变为小写
indexOf() //会搜索指定字符串出现的位置
substring() //返回指定索引区间的子串
内容将持续更新