专栏首页WebJ2EEJS:类型、类型转换

JS:类型、类型转换

有不少人认为: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》

本文分享自微信公众号 - WebJ2EE(WebJ2EE)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • React:redux-form 应用示例

    redux-form 提供了一堆 selector,便于我们从state中获取 form 表单的各种状态数据...

    WEBJ2EE
  • JS:Web Storage API(localStorage、sessionStorage)

    Web Storage API 提供了存储机制,通过该机制,浏览器可以安全地存储键值对,比使用 cookie 更加直观。Web Storage 包含如下两种机制...

    WEBJ2EE
  • Spring周边:StringTokenizer

    JDK 已经不建议在新代码中使用 StringTokenizer 了,建议使用正则表达式功能替换;

    WEBJ2EE
  • JavaScript简介与基础语法

    JavaScript是学习前端开发必须要掌握的三大知识点之一,JavaScript是一种直译式的脚本语言,是一种动态类型、弱类型、基于对象和事件驱动的语言,并且...

    端碗吹水
  • JavaScript原型链档案

    事实上JavaScript一直以来都是基于对象和原型的,除了Number、String、Boolean等基本数据类型之外,JavaScript中的一切都是对象。...

    gojam
  • [PHP] PHP的脚本执行

    PHP的脚本执行: PHP的脚本执行还是会经过编译环节, 只不过它们一般会在运行的时候实时进行编译 1.启动PHP及Zend引擎, 加载注册的扩展模块 2.读取...

    陶士涵
  • 【入门必备】学编程都从事那些行业工作

    说了这么多都是一直在谈如何学习编程,学习java,c/c++等一些基础的东西。可能有些人会问,学了能干什么?学泥瓦工,可以码砖头、学裁缝能做衣服。这个都有明确...

    程序员互动联盟
  • WebService入门初使用(二)调用WebService服务

    上一节记录完WebService的创建,鉴于篇幅所致,将调用部分单独拿到本节,所调用WebService服务基于上一章节内容。

    汐楓
  • 【Embedding】SDNE:深度学习在图嵌入领域的应用

    今天学的论文是清华大学崔鹏老师工作《Structural Deep Network Embedding》(后简称 SDNE),并发表于 2016 KDD,目前为...

    阿泽 Crz
  • Java 中如何判断数组中是否包含某个值?

    public static boolean useLoop(String[] arr, String targetValue) { for(String s: ...

    水货程序员

扫码关注云+社区

领取腾讯云代金券