前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS:类型、类型转换

JS:类型、类型转换

作者头像
WEBJ2EE
发布2019-07-19 12:02:31
7.6K0
发布2019-07-19 12:02:31
举报
文章被收录于专栏:WebJ2EEWebJ2EE

有不少人认为:JavaScript 没有类型!

正解是JavaScript 中的变量没有类型,但值有类型。变量可以随时持有任何类型的值。

1. 值与类型

JavaScript 有 7 种内置类型:

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol,ES6 中新增)

使用 typeof 运算符即可查看值的类型

特别注意:typeof null == "object",这已被设计和维护 JavaScript 的委员会 T39 认定是一个错误。但这个bug由来已久,也许永远也不会修复,因为这牵涉到太多的 Web 系统。

要区分 undefinedundeclared 状态:

  • 变量已声明,但未初始化,它的值就是 undefined;
  • 变量未声明,就是 undeclared,访问未声明变量会报错

2. 类型转换基本规则

在很多 JavaScript 书籍中强制类型转换被说成是危险、晦涩和糟糕的设计。但对于不懂的地方我们应该迎难而上,知其然并且知其所以然,不会因为种种传言就退避三舍。

字符串、数字和布尔值之间类型转换的基本规则;

a. ToBoolean:

图1:toBoolean 示例

b. ToString:

图2:toString 示例

b. ToNumber:

图3:toNumber 示例

倒计时 10 秒钟 ...

公布答案 ...

3. “显式”强制类型转换

“显式” 是指那些意图较明显的方式...

a. 转换为 Boolean:

Boolean(...)(不带 new); ! 运算符(转换为 boolean 并反转); if( ...) 语句中的条件判断表达式; for( ..; ..; ..) 语句中的条件判断表达式; while(..) 循环中的条件判断表达式; do...while(...) 循环中的条件判断表达式; ? : 中的条件判断表达式; 逻辑运算符 || 或 && 左边的操作数;

b. 转换为 Number:

Number(...)(不带 new) + 一元运算符 - 一元运算符(转换并反转符号位) parseInt(string, radix) parseFloat(value)

c. 转换为 String:

String(...) (不带 new) .toString()

3. “隐式”强制类型转换

“隐式” 指那些隐晦、易坑人的方式...

a. 加法与字符串连接(+):

最权威的解释,永远来自于规范

b. 宽松相等判定(==):

还是看规范中最权威的解释

下面以一道 JS 面试题

结束本文

题目: 实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15

下面是利用 valueOf 特性给出的一种解

参考:

https://tc39.github.io/ecma262/ 《JavaScript 权威指南》 《你不知道的 JavaScript(中卷)》 《JavaScript 语言精粹》 《Effective JavaScript》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebJ2EE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档