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. 热烈庆祝UE4完全免费Free---GitHub上源码的关联方法

    声明:所有权利保留. 转载请说明出处:http://blog.csdn.net/cartzhang/article/details/44040317 IF YOU LOVE SOMETHING, SE ...

  2. [Flow] Declare types for application

    In Flow, you can make global declarion about types. Run: flow init It will generate .flowconfig file ...

  3. js进阶 9-9 html控件如何实现回车键切换焦点

    js进阶 9-9 html控件如何实现回车键切换焦点 一.总结 一句话总结:在onkeydown事件中判断event对象的键位码,然后focus事件. 二.js进阶 9-9 html控件如何实现回车键 ...

  4. XMPP之ios即时通讯客户端开发-配置XMPP基本信息之工程代码(五)

    登录功能完成以后包含以下代码文件: AppDelegate.h AppDelegate.m LoginViewController.h LoginViewController.m LoginUser. ...

  5. Android中使用achartengine生成图表

    今天在做项目的时候用到了图表功能,记录下来 achartengine是google的一个开源项目,可以在https://code.google.com/p/achartengine/ 下载技术文档,j ...

  6. AutoHotKey 的使用 —— 使用键盘调节 windows 声音

    AutoHotKey 下载地址 AutoHotkey Downloads 首先进行 AutoHotKey 的安装 编写如下 .ahk 文件(F10:打开关闭声音,F11:增加声音,F12:减少声音,当 ...

  7. mingw qt(可以去掉mingwm10.dll、libgcc_s_dw2-1.dll、libstdc++-6.dll的依赖,mingw默认都是动态链接gcc的库而TDM是静态链接gcc库,tdm版本更好用。用aspack压缩没有问题。qt本身不使用异常处理)good

    原文地址:mingw qt作者:孙1东 不使用Qt SDK,使用mingw编译qt源代码所遇问题及解决方法: configure -fast -release -no-exceptions -no-r ...

  8. Android 升级下载 它们的定义Updates 兼容版本

    Android 更新模块 它们的定义Update 写这个总结是由于在项目中碰到了Android系统兼容的BUG   Android项目原本使用的是API提供的下载方法   例如以下: Download ...

  9. Gram 矩阵性质及应用

    v1,v2,-,vn 是内积空间的一组向量,Gram 矩阵定义为: Gij=⟨vi,vj⟩,显然其是对称矩阵. 其实对于一个XN⋅d(N 个样本,d 个属性)的样本矩阵而言,X⋅X′ 即为 Gram ...

  10. win10家庭版连接不上远程桌面

    解决方案来自于:https://blog.csdn.net/weixin_39129504/article/details/80303615 这个解决方案的关键: done!不知是否侵权  如有侵权 ...