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. DbVisualizer的使用

    DbVisualizer的使用 一. Db工具的使用,怎么新建一个数据库连接? 新建一个数据库连接,点击 Tools > Connection Wizard 来新建一个数据库: 或者直接点击 + ...

  2. BZOJ3073 Journeys - 线段树优化建边

    传送门 题意: Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路: ...

  3. 【t060】可怜的波特

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 哈里波特在姨夫家遭受非人待遇,他被迫做很多事.有一次,姨夫有给了他一大堆家务.哈里知道每件做完家务的时 ...

  4. App各种Icon及Launch image的尺寸和用途

    App各种Icon及Launch image的尺寸和用途 IOS7,8 Asset iPhone 6 Plus (@3x) iPhone 6 and iPhone 5 (@2x) iPhone 4s ...

  5. 学习鸟哥的Linux私房菜笔记(13)——用户管理

    一.检查用户身份 用户可以使用下列指令了解用户身份 who :查询当前在线的用户 groups :查询用户所属组 id :显示当前用户信息 finger :查询用户信息 二.添加用户 用指令添加命令 ...

  6. 手动安装huson插件的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先到jenkins-ci.org下载插件,地址为:http://updates.jenkins-ci.org/dow ...

  7. C++动态数组简单的模拟二元堆

    //C++动态数组简单的模拟二元堆 #include<iostream> using namespace std; class BinaryHeap { private: int cap; ...

  8. 华为如何实现基于Git的跨地域协同开发

    跨地域开发的需求其实由来已久,在IT/互联网发展的早期就已存在,只不过限于当时网络环境的因素,无法在线上有效的完成协同工作,所以没法实际开展.而随着近十年网络的快速发展,跨地域协同开发线变得可能而且越 ...

  9. [福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus

    Chrome Sniffer Plus: Chrome 探测器,可以探测正在使用的开源软件或者 js 类库,开发者必备. 通过本插件,您可以探测: javascript 库: jQuery.ExtJS ...

  10. ik_max_word ik_smart

    打开 ~/es_root/config/elasticsearch.yml 文件,加入以下配置: index: analysis: analyzer: ik_syno: type: custom to ...