javascript的强制类型转换
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的强制类型转换的更多相关文章
- javascript中强制类型转换
javascript开发过程中,强制类型转换一般发生在条件判断和==运算符.其他情况,发生的类型转换(与这两种情况也是基本类似,属于万变不离其宗的范畴),暂不讨论. == 双等运算符 考虑代码: a ...
- javascript之强制类型转换
在javascript中,常会发生强制类型转换的情况有以下几种 字符串拼接 var a = 1; var b = a + '1'; console.log(b); //11 ==运算符 var a = ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- 《你不知道的JavaScript》整理(六)——强制类型转换
JavaScript中通常分为两种类型转换,"隐式强制类型转换"(implicit coercion)和"显式强制类型转换"(explicit coercion ...
- Javascript对象Oject的强制类型转换
众所周知Javascript作为一种动态类型,弱类型的脚本语言其数据类型在很多时候都会发生类型转换.而这些类型转换往往都是隐式的,这让我们在使用Js的时候会产生许多麻烦.而Js的基础数据类型的转换在此 ...
- 谈 JavaScript 中的强制类型转换 (2. 应用篇)
这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...
- 带你玩转JavaScript中的隐式强制类型转换
正题开始前我想先抛出一个问题,==和===有什么区别?可能一般人会想,不就是后者除了比较值相等之外还会比较类型是否相等嘛,有什么好问的,谁不知道?!但是这样说还不够准确,两者的真正区别其实是==在比较 ...
- 详细理解javascript中的强制类型转换
将值从一种类型转换为另一种类型通常称为类型转换,这是显式的情况:隐式的情况称为强制类型转换,JavaScript 中的强制类型转换总是返回标量基本类型值,如字符串.数字和布尔值. 如何理解: 类型转换 ...
- JavaScript基础&实战(2)js中的强制类型转换、运算符、关系运算符、逻辑运算符、条件运算符
文章目录 1.强制类型转换Number 1.1 代码 1.2 测试结果 2.进制表示 2.1 代码 2.2 测试结果 3.强制类型转换为Boolea 3.1 代码 3.2 测试结果 4.运算符 4.1 ...
随机推荐
- [转至云风的博客]开发笔记 (2) :redis 数据库结构设计
接上回,按照我们一期项目的需求,昨天我简单设计了数据库里的数据格式.数据库采用的是 Redis ,我把它看成一个远端的数据结构保存设备.它提供基本的 Key-Value 储存功能,没有层级表.如果需要 ...
- spark 2.0.2 集群搭建
由于之前已经搭建过hadoop相关环境,现在搭建spark的预备工作只有scala环境了 一,配置scala环境 1.解压tar包后,编辑/etc/profile 2.source /etc/prof ...
- nil和Nil和NULL的判断
,nil和Nil和NULL的判断 开 发过程中,我们通过http请求,后台返回json数据,而有时数据里某一字段的值为null-,然后我们把此值赋值给 NSArray,NSdictionary,或是N ...
- hdu1693插头dp(多回路)
题意:在n*m的矩阵中,有些格子有树,没有树的格子不能到达,找一条或多条回路,吃全然部的树,求有多少中方法. 这题是插头dp,刚刚学习,不是非常熟悉,研究了好几天才明确插头dp的方法,他们老是讲一些什 ...
- Android Studio 报错Guest isn't online after 7 seconds 解决方案
最近使用真机模拟之后,再使用虚拟机就频繁出现这个问题; 解决步骤如下: 1.打开Android虚拟设备管理器, 2.查看Actoins栏下拉图标, 3.选择冷启动模式即可, 4.重启AVD正常;
- Node.js学习疑惑整理
1.Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为 包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 in ...
- 【16.56%】【codeforces 687B】Remainders Game
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- PAT 1001-1010 题解
早期部分代码用 Java 实现.由于 PAT 虽然支持各种语言,但只有 C/C++标程来限定时间,许多题目用 Java 读入数据就已经超时,后来转投 C/C++.浏览全部代码:请戳 本文谨代表个人思路 ...
- 设置m_pszAppName值的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 CWinApp::m_pszAppName用于指定应用程序的名字.昨天这样修改它的值: m_pszAppName = ...
- 51系列小型操作系统精髓 简单实现6 C语言版待改进
#include "STC12C5A.H" #define TIMER_RELOAD() {TL0=0x00;TH0=0xC4;}//使能T/C 初始10ms #define ...