javascript的强制类型转换

一、toStringjavascript

(1)调用toString方法java

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

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

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

boolean,true转为"true",false转为"false"工具

(2)JSON字符串化对象

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

JSON.stringify(11)  // 11字符串

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

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值。

二、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()方法,所以没法进行强制类型转换。

三、toBoolean

javascript中的值分为如下两类:

(1)能够被强制类型转换为false的值

(2)其余(能够被强制类型转换为true的值)

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

如下这些是假值:

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

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

相关文章
相关标签/搜索