1、toString

(1)调用toString方法

Array是将数组中的每个元素字符串化,并使用逗号拼接起来

object返回的是内部属性[[Class]]的值,[object Object]

number则是转换为字符串值,如1转为"1",NaN转为"NaN",1/0转为"Infinity"

boolean,true转为"true",false转为"false"

(2)JSON字符串化

工具函数JSON.stringify(..)在将JSON对象序列化为字符串时也使用了ToString方法

JSON.stringify(11)  // 11

JSON.stringify("11")  // ""11""

JSON.stringify(null)  // "null"

JSON.stringify(true)  // "true"

但是JSON.stringify只能转化安全的JSON值,不安全的值包含如下格式

  • undefined
  • function
  • symbol
  • 包含循环引用的对象

当在object中出现undefined、function、symbol时会自动忽略,在array中遇到则返回null,已保证单元格位置不变。

当包含循环引用的对象时,则会报错。

注意:若对象定义了toJSON()方法,JSON字符串化时会先调用该方法,然后使用它的返回值来进行序列化。(因此可以对JSON不安全的对象,定义一个toJSON方法)

JSON.stringify(..)第二个参数可以是数组或函数,数组定义需要哪些key值需要被返回,函数有两个参数,分别为key和value,如果要忽略某个值,则return undefined,否则return相应的value。

var a = {

  b: 11,

  c: '11',

  d: [1, 2, 3]

}

JSON.stringify(a, ['b', 'c']) // {b: 11, c: '11'}

JSON.stringify(a, function(k, v) {

  if (k !== 'c') return v;

})

// {b: 11, c: '11'}

a、字符串、数字、布尔值和null的JSON.stringify(..)规则和toString()方法相同

b、如果传递给JSON.stringify(..)的对象定义了toJSON()方法,那么该方法会在字符串化前调用,以便将对象转化为安全的JSON值。

2、toNumber

ES5规范定义了抽象操作ToNumber

true 转换为1,

false 转换为0,

undefined转换为NaN,

null转换为0,

字符串若是类数字转换为对应的数字,处理失败返回NaN,

对于以0开头的16进制不是按16进制处理,而是按10进制处理,

对象会首先转换为基本类型值,然后再按以上规则进行转换。

转换为基本类型值的方式是检查该对象是否有valueOf()方法,如果有并且返回基本类型值,就使用该值进行强制类型转换。如果没有就使用toString()的返回值(如果存在)来进行强制类型转换。

如果valueOf()和toString()均不返回基本类型值,则产生TypeError错误。

从ES5开始,使用Object.create(null)创建的对象[[Prototype]]属性为null,并且没有valueOf()和toString()方法,因此无法进行强制类型转换。

3、toBoolean

javascript中的值分为以下两类:

(1)可以被强制类型转换为false的值

(2)其他(可以被强制类型转换为true的值)

ES5规范9.2节中定义了抽象操作toBoolean

以下这些是假值:

  • undefined
  • null
  • false
  • +0、-0、NaN
  • ""

假值可以强制类型转换为false。从逻辑上讲,假值以外的都应该是真值。但Javascript规范对此并没有明确的定义,只是给出了一些实例。

javascript的强制类型转换的更多相关文章

  1. javascript中强制类型转换

    javascript开发过程中,强制类型转换一般发生在条件判断和==运算符.其他情况,发生的类型转换(与这两种情况也是基本类似,属于万变不离其宗的范畴),暂不讨论. == 双等运算符 考虑代码: a ...

  2. javascript之强制类型转换

    在javascript中,常会发生强制类型转换的情况有以下几种 字符串拼接 var a = 1; var b = a + '1'; console.log(b); //11 ==运算符 var a = ...

  3. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  4. 《你不知道的JavaScript》整理(六)——强制类型转换

    JavaScript中通常分为两种类型转换,"隐式强制类型转换"(implicit coercion)和"显式强制类型转换"(explicit coercion ...

  5. Javascript对象Oject的强制类型转换

    众所周知Javascript作为一种动态类型,弱类型的脚本语言其数据类型在很多时候都会发生类型转换.而这些类型转换往往都是隐式的,这让我们在使用Js的时候会产生许多麻烦.而Js的基础数据类型的转换在此 ...

  6. 谈 JavaScript 中的强制类型转换 (2. 应用篇)

    这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...

  7. 带你玩转JavaScript中的隐式强制类型转换

    正题开始前我想先抛出一个问题,==和===有什么区别?可能一般人会想,不就是后者除了比较值相等之外还会比较类型是否相等嘛,有什么好问的,谁不知道?!但是这样说还不够准确,两者的真正区别其实是==在比较 ...

  8. 详细理解javascript中的强制类型转换

    将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换 ...

  9. JavaScript基础&实战(2)js中的强制类型转换、运算符、关系运算符、逻辑运算符、条件运算符

    文章目录 1.强制类型转换Number 1.1 代码 1.2 测试结果 2.进制表示 2.1 代码 2.2 测试结果 3.强制类型转换为Boolea 3.1 代码 3.2 测试结果 4.运算符 4.1 ...

随机推荐

  1. IT增值服务-客户案例(三):合肥薪火科技,Java和P2P网络借贷系统开发指导

    客户整体情况: 合肥薪火科技,是安徽合肥一家主营微信开发和运营的中小企业,http://weimarket.cn/. 这家公司筹备.创立.曲折创业的经历,我一直有关注.因为2个老板,都是我的同学校友, ...

  2. jQuery Mobile手机网站案例

    jQuery Mobile手机网站案例 一.总结 一句话总结:jQuery Mobile是纯手机框架,和amazeui和bootstrap都可以做手机网站. 1.另一款文本编辑器? jd编辑器 二.j ...

  3. [GeekBand] C++ 基础知识之 The Big Three

    本文是GeekBand课程体系中,侯捷老师讲课内容的部分内容总结. 参考书籍如下:Effitive C++ C++ Primer 第五版 http://blog.csdn.net/lwbeyond/a ...

  4. redis集群搭建手册

    搭建集群需要用到安装后的redis单机版的bin目录,所以我们先搭建redis单机版 Redis单机版搭建: 因为需要安装redis源码包,所以我们需要gcc环境支持 : 使用FTP工具将压缩包上传至 ...

  5. js中的apply与call的用法与区别

    call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.call 和 apply二者的作用完全一样,只是接受参数的 ...

  6. windows - Cygwin和MinGW有什么区别?(MinGW从Cygwin 1.3.3版本中分离出来)

    windows - Cygwin和MinGW有什么区别? 我想让我的C ++项目跨平台,我正在考虑使用Cygwin / MinGW. 但是他们之间有什么区别呢? 另一个问题是,如果没有Cygwin / ...

  7. range 的实现细节(start、end、step)(左闭右开区间)

    range(int start, int end, int step); 返回的区间是 [start, end) 要求步长为 step,三个参数均为整数, 在底层实现时,最终返回的区间元素的数目应当为 ...

  8. Mint UI 使用指南

    上来直接在webpack里将Mint UI引入项目,发现各种问题.饿了么组件库文档太坑了,好多地方写错,有些该说明的地方没说,比如例子里单文件.vue组件里用的类post-css处理器,我一直使用SA ...

  9. Cordova之打包签名apk

    首先是关于apk签名,Android程序的安装是以包名(package name)进行区分的,就是同样的包名会被认作是同一个程序.这样就可以进行升级.替换.但是包名是一个可以被查看的字符串,这样就可能 ...

  10. 在WSL中安装和运行Docker CE

    安装环境 Windows 10 64bit 专业版 1809 WSL安装ubuntu 18.04 LTS DOCKER安装 安装过程没有什么问题,安装docker的网站说明进行安装https://do ...