什么是显式

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

抽象操作

字符串、数字、布尔值之间类型转换的基本规则 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. Charles设置断点- (超详解)

    1.选择你要设置断点的接口 2.右键选择 Breakpoints 3.断点的相关配置, Proxy ——>Breakpoint Settings 5.双击刚刚已经设置的断点接口,进行设置 6. ...

  2. golang ---timeb

    golang 提供了以下两种基础类型 - 时间点(Time) - 时间段(Duration) 除此之外 golang 也提供了以下类型,做一些特定的业务 - 时区(Location) - Ticker ...

  3. [Silverlight 4] 參數的傳遞方法

    Silverlight都會有一個專案叫 *.Web,有個ManagePage.aspx裝戴Silverlight元件,也是應用程式的入口 然後還會有一個專案(此處叫ManageBack),會編譯成Si ...

  4. Delphi - 利用DLL编程控制摄像头实现拍照、录制视频

    Delphi利用avicap32.dll编程控制摄像头实现拍照.录制视频 项目需求:平板电脑(Windows系统)一维/二维码扫描功能: 需求分析: 需要扫描一维/二维码时,分两步实现. 第一步,av ...

  5. logger.info占位符的使用

    {}表示占位符,使用方法如下: package org.pine.controller; import javax.annotation.Resource; import org.pine.servi ...

  6. weblogic漏洞

    1 weblogic控制台地址暴露 ²  整改方法: 禁用weblogic控制台.在weblogic域(sguap-domain和base-domain)的config下的config.xml中 &l ...

  7. AI:WEB:1 Walkthrough

    AI: Web: 1 Vulnhub Walkthrough靶机下载:https://www.vulnhub.com/entry/ai-web-1,353/测试方法:    Nmap网络扫描    浏 ...

  8. android studio学习----创建模拟器

    建议在创建模拟器前把 SDK Manager 中的 Tools.Extras 都更新到最新. 如何弹出下面的各个图,首先直接点击  运行  然后会选择  launcher ,点击那个 ...就出来了 ...

  9. 浅谈MongoDB基础及架构

    1.简述MongDB是一个强大.灵活而可扩展的数据存储系统,其将强大的可扩展特性与关系库最有用的特性进行了整合,像:次级索引,范围查询和排序等特性.而MongDB也内建了类似MapReduce汇聚和地 ...

  10. Hashtable,HashMap和ConcurrentHashMap的原理及区别

    一.原理 Hashtable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashM ...