共计 1378 个字符,预计需要花费 4 分钟才能阅读完成。
引言
来到北京已经有 4 个年头了,做过一些测试、打杂、前端的工作之后,最后还是选择了前端的工作。现阶段主要还是在写业务代码,代码质量,工作效率就显得尤为重要。【学以致用】这个系列主要记录一些平时工作、学习遇到的一些问题,方便以后查漏补缺。
value
JavaScript 中原始类型的值,包括字符串、数字、布尔值、Symbol(ES6 新增),以及两个特殊值:null(空)、undefined(未定义)。
通常我们在工作的时候需要和后台对接,函数在处理返回值的时候如果做了容错判断,把数据转换成我们想要的类型,在编写后续业务代码的时候就会更加轻 :-D
下图是《JavaScript 权威指南》中关于类型转换的总结:
举个栗子:后台返回值为一个字符串,内容是 0 ~ 5 的数字,现在使用的时候需要将参数转化为数字类型。
// wrong
return Number(value)
// ” -> 0
// undefined -> throw TypeError
// ‘aaa’ -> NaN
// right 前面是剔除掉 ” undefined,后面可以剔除掉 NaN 的类型
if (value && Number(value) >= 0) {
return Number(value);
} else {
return null;
}
关于值的比较,当我们只关心值是否正常时,还有一个比较靠谱的方法:正则表达式,上面的例子也可以这样来写:
if (/[0-5]/.test(value)) {
return Number(value);
} else {
return null;
}
小结:在判断两个值是否相等时,最好显式的转化,然后用全等运算符 === 或者 !== 来比较。
js 比较表:https://dorey.github.io/JavaS…
对象转换为原始值
所有对象会继承两个方法 toString() 和 valueOf()。
对象转换为字符串 String(Object)
1、当对象具有 toString() 会优先调用;
2、如果没有 toString() 方法,或者 toString() 没有返回一个原始值,则会调用 valueOf() 方法;
3、无法从 toString() 和 valueOf() 获取原始值的时候,则会抛出一个类型错误异常。
String([1,2,3]) // “1,2,3”
String(function(x) {return x+1;}) // “function(x) {return x+1;}”
String(“/\d+/g”) // “/\d+/g”
String(new Date(2019,4,14)) // “Tue May 14 2019 00:00:00 GMT+0800 (中国标准时间)”
对象转换为数字 Number(Object)
1、当对象具有 valueOf() 会优先调用;
2、如果没有 valueOf() 方法,或者 valueOf() 没有返回一个原始值,则会调用 toString() 方法;
3、无法从 toString() 和 valueOf() 获取原始值的时候,则会抛出一个类型错误异常。
Number([1,2,3]) // NaN 原始类型
Number(function(x) {return x+1;}) // NaN
Number(“/\d+/g”) // NaN
Number(new Date(2019,4,14)) // 1557763200000
参考文章
JavaScript 权威指南 – 第三章:类型、值和变量