目录
1. 类型
2. 强制类型转换
2.1. 抽象操作——类型转换
2.1.1. ToBoolean(argument)
2.1.2. ToString(argument)
2.1.3. ToNumber(argument)
2.1.4. ToPrimitive ( input [ , PreferredType ] )
2.2. Object.prototype.valueOf() 方法
2.3. Object.prototype.toString() 方法
2.3.1. Array.toString()
2.3.2. Date.toString()
2.4. 显式强制类型转换
2.4.1. 转为 String
2.4.2. 转为 Number
2.4.3. 转为 Boolean
2.5. 隐式强制类型转换
2.5.1. “+” 操作符
2.5.2. “==” 宽松相等
2.5.3. 抽象关系比较
3. 几道笔试题
1. 类型
正确理解 JavaScript 中的类型:
图1-1:ECMAScript 定义的标准数据类型
图1-2:用 typeof 查看值的类型
图1-3:typeof 与 undeclared
2. 强制类型转换(Type coercion)
在很多 JavaScript 书籍中强制类型转换被说成是危险、晦涩和糟糕的设计。但对于不懂的地方我们应该迎难而上,知其然并且知其所以然,不会因为种种传言就退避三舍。
2.1. 抽象操作——类型转换
The ECMAScript language implicitly performs automatic type conversion as needed. To clarify the semantics of certain constructs it is useful to define a set of conversion abstract operations. The conversion abstract operations are polymorphic; they can accept a value of any ECMAScript language type. http://www.ecma-international.org/ecma-262/10.0/index.html#sec-type-conversion
2.1.1. ToBoolean(argument)
图2-1:ToBoolean 示例
图2-2:坑,别跳进去,笔试题经常玩这个
2.1.2. ToString(argument)
图2-3:ToString 规则细节
图2-4:ToString 示例
2.1.3. ToNumber(argument)
图2-5:ToNumber 规则细节
图2-6:ToNumber 示例
2.1.4. ToPrimitive ( input [ , PreferredType ] )
图2-7:ToPrimitive 示例
图2-8:Date-ToPrimitive 示例
图2-9:Symbol-ToPrimitive 示例
2.2. Object.prototype.valueOf() 方法
2.3. Object.prototype.toString() 方法
每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型。
2.3.1. Array.toString()
2.3.2. Date.toString()
2.4. 显式强制类型转换
“显式” 是指那些意图较明显的方式...
2.4.1. 转为 String
String(...)(不带 new)
图2-10:String(value) 官方说明
2.4.2. 转为 Number
Number(...)(不带 new)
+ 一元运算符
- 一元运算符(转换并反转符号位)
parseInt(string, radix)
parseFloat(value)
图2-11:Number(value) 官方说明
图2-12:一元操作符 +、- 官方说明
2.4.3. 转为 Boolean
Boolean(...)(不带 new);
! 运算符(转换为 boolean 并反转);
if(...) 语句中的条件判断表达式;
for( ..; ..; ..) 语句中的条件判断表达式;
while(..) 循环中的条件判断表达式;
do...while(...) 循环中的条件判断表达式;
? : 中的条件判断表达式;
逻辑运算符 || 或 && 左边的操作数;
图2-13:Boolean(value) 官方说明
图2-13:逻辑运算符 ! 官方说明
2.5. 隐式强制类型转换
显式强制类型转换的作用是让代码清晰易读
隐式强制类型转换的作用是减少冗余
2.5.1. “+” 操作符
2.5.2. “==” 宽松相等
翻译:
2.5.3. 抽象关系比较
3. 几道笔试题
题目01:
题目02:
题目03:
题目04:
参考:
MDN,JavaScript,Grammer and Types: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_Types ECMAScript-262: http://www.ecma-international.org/ecma-262/10.0/index.html#sec-abstract-operations http://www.ecma-international.org/ecma-262/10.0/index.html#sec-unary-plus-operator https://tc39.es/ecma262/#sec-array.prototype.tostring https://tc39.es/ecma262/#sec-date.prototype.tostring https://tc39.es/ecma262/#sec-addition-operator-plus https://tc39.es/ecma262/#sec-abstract-equality-comparison https://tc39.es/ecma262/#sec-abstract-relational-comparison