JavaScript基础学习之-JavaScript权威指南--3.8.3对象转换成原始值

对象转换成原始值

对象到布尔:比较简单所有对象到布尔都是true,包括包装类new Boolean(false)是一个对象而不是原始值,它将转换为true

对象到数字对象到字符串比较复杂一些。注意这里讨论的是本地对象,不包含宿主对象(例如浏览器定义的对象)

所有对象继承了两个转换方法。

第一种toString()

  它的作用是返回一个反映这个对象的字符串。默认的toString()方法并不会返回一个有趣的值。

很多类定义了特定版本的toString()方法:

  • 数组的toString()方法将每个数组元素转换为一个字符串,并在元素之间添加逗号合并成结果字符串
  • 函数类的toString()方法返回这个函数的实现定义的表示方式。通常是将用户定义的函数转换为Javascript源代码字符串
  • 日期类toString()返回一个可读的日期和时间字符串。
  • RegExp类toString()将返回RegExp对象转换为表示正则表达式直接量字符串。

例:

1  [1,2,3].toString()//=>”1,2,3”
2
3   (function(x){f(x);}).toString()//=>” function(x){\nf(x);\n}”
4
5   /\d+/g.toString()//=>”/\\d+/g”
6
7  newDate(2010,0,1).toString() //=>”Fri Jan 01 2010 00:00:00 GMT-0800(PST)”
8
9  

第二种转换对象的函数是valueOf()

对象是复合值,而且大多数对象无法真正表示一个原始值。数组、函数和正则表达式简单地继承了这个默认方法,调用这些类型的实例的valueOf()方法只是简单地返回对象本身。日期类的valueOf方法会返回一个内部表示:1970年1月1日以来的毫秒数如

1 var d = new Date(2010,0,1)
2
3 d.valueOf() //126332800000

通常情况下对象是通过toString()和valueOf()方法,就可以做到对象到字符串和对象到数字的转换。但也有特殊场景。后面会提到。

对象到字符串的转换:

a.      如果具有toString()方法,则调用这个方法,如果它返回一个原始值,js将其转换为字符串,并返回这个字符结果。原始值到字符串的转换。

b.      如果没有toString()或者这个方法并不返回一个原始值,那么js会去调用valueOf()。如果有调用它,如果返回值是原始值。则将其转换成字符串。

c.      如果没有toString()或valueOf()获得一个原始值,因此会抛出一个类型错误异常。

对象到数值的转换:

a.      如果对象具有valueOf()方法,后者返回一个原始值,则javascript 将这个原始值转换为数字并返回这个数字

b.      否则,如果对象具有toString() 方法,后者返回一个原始值,则js将这个原始值转换返回

c.      否则,js报类型错误。

对象的转化都是通过函数获得原始值在转化成想要的类型,如果不能获得原始值就报错。

如果运算符”+”用作对象的话。则js使用特殊的方式将对象转换成原始值。而不是使用其它算数运行符的方法执行对象到数字的转换,“==”运算符与此类似。如果将对象和一个原始值比较,则转换将会遵照对象到原始值的转换方式进行。

“+”和 “==” 应用对象到原始值的转换:基本上是应用对象到数字的转换,先调用valueOf()

日期对象比较特殊它会使用对象到字符串的转换模式。而且这里所说的通过valueOf()和toString()转换的原始值会直接使用,而不会强制转换为数字和字符串。

“<”运算符以及其它关系运算符也会做对象到原始值的转换,但要除去日期对象的特殊情形:任何对象都会先尝试调用valueOf(),然后toString(),不管得到的原始值是否直接使用,它都不会进一步被转换成数字或字符串

“+”,“==”,“!=”是唯一执行这种特殊字符串到原始值转换的方式的运算符

时间: 2024-08-10 08:33:49

JavaScript基础学习之-JavaScript权威指南--3.8.3对象转换成原始值的相关文章

JavaScript基础学习之-JavaScript权威指南-3.6包装对象

JavaScript对象是一种复合值,是已知属性或是命名值的集合. 我们看到字符串也同样有属性和方法. var s = "Test"; var len=s.length; 我们知道在JavaScript中像上面这样声明的字符串不是对象,但既然这里的s不是对象,为什么会有length的属性呢? 原因是在JavaScript中只要引用了字符串(数字.布尔值也是一样的)的属性,JS就会将字符串通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引

JavaScript基础学习之-JavaScript权威指南--8.7函数属性方法构造函数

函数属性.方法和构造函数 一.函数属性 函数是js中特殊的对象,可以拥有属性. funcation.length属性:代表形参的长度,只读属性,不允许更改 arguments.length代表的是实参长度 prototype属性:每个函数都有一个prototype属性,当把函数当做构造函数时,新创建的对象会从原型对象上继承属性. 二.函数方法 与其他语言不同,ECMAScript函数不介意传递进来多少个参数,也不在乎是什么类型.因为实参在内部是用一个类数组来表示的,函数接收到的始终是个类数组.

JavaScript基础学习之-JavaScript权威指南--8.1-8.4函数

第八章函数 函数是JavaScript中很重要的一个章节,懂得这个章节就可以轻松阅读别人的代码,会熟悉一些不常用的代码写法. 按照难易程度控制文章的长度. 前言: 函数是一段只定义一次,可能被执行或调用任意次的JavaScript代码. 若一个函数挂载在一个对象上,作为对象的属性,称为对象的方法.当通过这个对象来调用函数时,该对象就是此次调用的上下文,函数会隐式自动获得上下文对象. JavaScript中函数即对象,程序可以任意操控. JavaScript的函数可以嵌套在其他函数中定义,这样嵌套

JavaScript基础学习之-JavaScript权威指南--3.1数字

数字 JavaScript不区分整数和浮点数,所有数字都是浮点数. 数字前加负号就得到相反数. 3.1.1整形直接量 十六进制:0X或是0x 不做标记:十进制 八进制:0 备注:某写JavaScript支持八进制. 3.1.2浮点型直接量 1.2E-3  =  1.2 * 10 的负3次 3.1.3算术运算 溢出:运算结果超出了数字能表示的结果,有上溢和下溢. 下溢:运算结果无限接近0. 0做除数:结果是无穷大或是负无穷大. 0/0 NaN 无穷大/无穷大 NaN 负数开方 NaN 不是数字或是

JavaScript基础学习之-JavaScript权威指南-3.4null和undefined

null和undefined比较 null是JavaScript关键字,表示非对象. undefined表示没有值,说明这个值不存在或是没有初始化. 相同点 不同点 自有类型唯一值 null是对象,undefined是保留字 没有属性和方法 null在参与数学运算中转化成0,undefined在数学运算中无法转化或是转化成NaN ==认为相等,===认为不等 null !==undefined //true 都是假值,在布尔值变量表示值相同 null是空对象,undefined是window的属

JavaScript基础学习之-JavaScript权威指南-3.5全局对象

全局对象 全局对象的属性可以直接用. JavaScript解释器启动或是任何web浏览器加载新页面的时候,都会创建新的全局对象,并给它一组定义的初始属性: 构造函数 描述 Date 日期对象 RegExp 正则表达式对象 String 字符串对象 Object object对象 Array 数组对象 全局对象 描述 Math 数学类计算 JSON json 全局函数 描述 decodeURI() 解码某个编码的 URI. decodeURIComponent() 解码一个编码的 URI 组件.

JavaScript基础学习之-javascript权威指南--8.6函数闭包

一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他描述的太学术. 其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”.看下面这段代码: function a() { var i = 0; function b() { alert(++i); } r

JavaScript基础学习之-JavaScript权威指南--3.2文本

文本 字符串是16位值组成的不可变的有序序列. 字符串的长度是16位值的个数. 3.2.1字符串直接量 字符串直接量:单引号或是双引号里的内容. ECMA3中字符串必须写在一行中. ECMA5中可以用"\"拆分很多行.

javascript基础学习(十五)

javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的secure 一.cookie介绍 cookie实际上就是一些信息,这些信息以文件的形式存储在客户端计算机上.在javascript中,cookie主要用来保存状态,或用于识别身份. 二.创建与获取cookie 创建cookie的语法代码如下所示:document.cookie="name=value&q