什么是显式

这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是“显式”,相反你不知道的话,对你就是“隐式”

抽象操作

字符串、数字、布尔值之间类型转换的基本规则 ES5定义了一些操作,诸如ToString、ToNumber、ToBoolean、ToPrimitive抽象操作

1.ToString 负责处理非字符到字符串的强制类型转换

undefined => "undefined"
null => "null"
number => "number" 极大数和极小数用指数表示
boolean => "boolean"
Symbol => "Symbol"
Object => instance.toString || Object.prototype.toString //规则由抽象操作ToPrimitive抽象操作里完成

2.ToNumber 非数字到数字的强制类型转换

undefined => NaN
null => 0
boolean => true 1 false 0
Symbol => 无法转换,本身用途是为了解决命令冲突
string => 数字常量规则,失败为NaN,且0开头的十六进制按照十进制处理
Object => 由抽象操作ToPrimitive抽象操作,检查该值是否有valueof方法并且返回基本类型,有就对返回值进行强制转换,没有就使用toString的返回值来强制转换,两者都没有得到基本值,会产生TypeError错误,更详细的转换规则会在ToPrimitive抽象操作详解

3.ToBoolean

3.1 假值(falsy value)

undefined
null
false
+0、-0、NaN
""
假值对象 document.all

假值对象是游览器废弃对象之后,为了分辨版本将其修改为假值对象,document.all就是其中一个例子

那为什么它要是假值呢?因为我们经常通过将document.all 强制类型转换为布尔值(比如

在if 语句中)来判断浏览器是否是老版本的IE。IE 自诞生之日起就始终遵循浏览器标准,

较其他浏览器更为有力地推动了Web 的发展。

if(document.all) { /* it’s IE */ } 依然存在于许多程序中,也许会一直存在下去,这对

IE 的用户体验来说不是一件好事。

虽然我们无法彻底摆脱document.all,但为了让新版本更符合标准,IE 并不打算继续支持

if (document.all) { .. }。

“那我们应该怎么办?”

“也许可以修改JavaScript 的类型机制,将document.all 作为假值来处理!”

3.2 真值 除假值列表之外的值

显式强制类型转换

1.1字符串和数字之间的显式转换

var a = 42;
var b = String( a ); var c = "3.14";
var d = Number( c );
b; // "42"
d; // 3.14 var a = 42;
var b = a.toString(); //直接调用toString var c = "3.14";
var d = +c; // +作为一元运算符来将操作数强制转换为数字
b; // "42"
d; // 3.14

1.2.显式解析数字字符串 这里要注意的是,解析和转换还是有明显区别,转换不允许出现非数字字符串,看下面例子

var a = "42";
var b = "42px";
Number( a ); // 42
parseInt( a ); // 42
Number( b ); // NaN
parseInt( b ); // 42

2显式转换为布尔值 非布尔值转换到布尔值的情况

// 使用Boolean(),不过不常用
var a = "0";
Boolean( a ); // true
var b = [];
Boolean( b ); // true
var c = {};
Boolean( c ); // true
var d = "";
Boolean( d ); // false
var e = 0;
Boolean( e ); // false
var f = null;
Boolean( f ); // false
var g;
Boolean( g ); // false //更加常用的方式 !!
!!a // boolean,里面的!将非布尔值转换到布尔值并取反,加一个!对取反的结果再次取反,得到原本的布尔值

深入js系列-类型(显式强制转换)的更多相关文章

  1. 深入js系列-类型(隐式强制转换)

    隐式强制转换 在其可控的情况下,减少冗余,让代码更简洁,很多地方都进行了隐式转换,比如常见的三目表达式.if().for().while.逻辑运算符 || &&,适当通过语言机制,抽象 ...

  2. Golang 类型转换,断言和显式强制转换

    1 前言 类型转换,可以用断言(只能使用在interface{}类型转换成其它类型)和显式类型强制转换(常规是用于基本类型) 2 代码 //graphql-go func(params graphql ...

  3. 你不知道的JavaScript--Item3 隐式强制转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object. object是引用类型,其它的五种是基本类型或者是原始类型.我们 ...

  4. Java并发编程系列-(4) 显式锁与AQS

    4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...

  5. 深入js系列-类型(开篇)

    思考 作为一个编程人员,你可能从来没仔细思考过,为什么这么多高级语言会有类型这东西. 实际上,类型有点类似生活中的类别,我们日常生活,早已经把这个概念理解到了,切肉和切水果会用不同的刀. 语言级别的类 ...

  6. mfc 类型间的强制转换

    一. static_cast运算符 用法:static_cast < type-id > ( expression ) 该运算符把expression 转换为type-id类型,但没有运行 ...

  7. c++无关类型指针的强制转换原理的分析和尝试

    因最近看到大量的c类型指针强制转换,联系到c++的reinterpret_cast强制转换符,故总结一下. 先上图 由图中可以看出,先声明了一个结构体t与一个含有三个元素的数组num,接着声明一个指向 ...

  8. JS高阶---显式原型和隐式原型

    前言: 1.函数对象即函数的prototype原型属性指向原型对象,在创建函数时便存在,默认为空Object 2.实例对象的__proto__隐式原型在实例化创建实例时产生,值等于构造函数的显式pro ...

  9. 深入js系列-类型(数字)

    开头 js数字没有明确区分浮点数和整数类型,统一用number类型表示. number 基于IEEE 754标准实现 js采用的是双精度(64位二进制) 我们看一个基于IEEE 754标准实现都有会有 ...

随机推荐

  1. Java8 新特性 Stream 练习实例

    练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...

  2. 【MySQL】MariaDB10.2新特性--Flashback

    MariaDB10.2新特性--Flashback Flashback可以回滚到旧的数据,用于解决用户误删除数据的问题. 实战例子 MariaDB [zsd]> select * from te ...

  3. Windbg断点调试.net程序

    程序员都知道,在生产环境中,如果没有系统日志,对问题的分析将非常的困难.即使有日志,有时候也会因为日志记录的不全面,而导致问题不能分析清楚.其实,Windbg里面有Live Debug功能,正好可以借 ...

  4. vue样式绑定、事件监听、表单输入绑定、响应接口

    1.样式绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求.因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可.不过,字符串拼接麻烦且易错 ...

  5. Java : Hibernate 动态+分页+自定义字段+自定义实体类查询

    // 组合查询public List<ListBookDTO> listSetDSL(PublishingHouse publishingHouse,Integer minDiscount ...

  6. 【JVM】【linux】linux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library name

    运行命令: jmap -heap 报错如下: Attaching to process ID , please wait... sun.jvm.hotspot.debugger.NoSuchSymbo ...

  7. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

  8. spring事务概念与获取事务时事务传播行为源码分析

    一.事务状态:org.springframework.transaction.TransactionStatus isNewTransaction 是否是新事务 hasSavepoint 是否有保存点 ...

  9. 安装ceres-solver win10遇到Eigen安装的问题

    1.无法打开包括文件: “Eigen/Core”: 去github上下载最新的源码 2.  "The Eigen/Array header does no longer exist in E ...

  10. 设置ItelliJ IDEA里修改jsp不重启tomcat

    设置ItelliJ IDEA里修改jsp不重启tomcat On Upate Action 与 On Frame Deactivation 这两个选项的设置,依赖于 项目的部署方式 是war包 还是 ...