`
artdialog
  • 浏览: 103992 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript:将所有值都转换成对象

 
阅读更多

原文:JavaScript: converting any value to an object

译文:JavaScript:将所有值都转换成对象

译者:justjavac


这是一篇关于 原始值(primitive values)和包装对象(wrapper objects)之间的转换 的文章。 值得庆幸的是,在 JavaScript 中,我们一般不需要这么做。 除非我们需要为原始值添加一些属性,但是原始值是不可改变的,因此需要把它转换为一个 包装对象

让我们从一个小测验开始:

({}).valueOf.call(myvar)

这段代码的作用是什么?

简单的回答:它把值类型转换成对象类型(对象保持不变,原始值转换为一个包装类型的实例)。

详细的解释需要翻阅 ECMAScript 5 规范(ECMA-262,第5版)。

({}).valueOf 使用 Object 的一个实例来访问 Object.prototype.valueOf

(译注:{} 字面量是 Object 的一个实例,如果直接写 '{}.valueOf' 则会出现解析错误,因为 javascript 引擎将{} 解析成一个代码块。@justjavac

call() 方法将 this 设置为 myvar,然后调用 Object.prototype.valueOf,此方法没有传递任何参数。

Object.prototype.valueOf(ECMA-262,15.2.4.4)调用内部的抽象操作 ToObject(ECMA-262,9.9)。此操作将原始值转换为等值的包装对象。因此,给定一个值(value),你将得到一个对象(object)。

这有点不合逻辑,因为在 Object 的所有子类型中,valueOf() 方法是将包装对象转换为原始值(正好和上述描述相反)。

> String.prototype.valueOf.call(new String("abc"))
'abc'
> String.prototype.valueOf.call("abc")
'abc'
> "abc".valueOf()
'abc' // via String.prototype.valueOf()

> Object.prototype.valueOf.call("abc")
{ '0': 'a'
, '1': 'b'
, '2': 'c'
}
> Object.prototype.valueOf.call(new String("abc"))
{ '0': 'a'
, '1': 'b'
, '2': 'c'
}

然而,Object.prototype.valueOf.call() 虽然可以把一个值转换成对象,但是这个方法名太长了(译注:在提倡低碳生活的今天,我们可能要极力反对这么长的方法名 @justjavac)。 另一种方法是使用 Object() 函数。

当 Object 被作为一个普通函数(而非构造函数)调用时,它的作用是类型转换[转换成对象]。[ECMA-262,15.2.1]

例子:

> Object("abc") instanceof String
true
> Object(new String("abc")) instanceof String
true
> Object(null)
{}

使用 Object 作为构造函数(使用关键词 new)基本上具有相同的效果,但作为一个函数,它更好地描述了哦一个事实:并不是每次都需要创建新的对象。

相关阅读:

  1. JavaScript 并非所有的东西都是对象
23
8
分享到:
评论
2 楼 liu765023051 2012-12-25  
还不错,有些收获。
1 楼 justjavac 2012-12-25  
欢迎转载。

相关推荐

    coerce-input:将值强制转换为JavaScript对象类型(如果有)

    将值强制转换为JavaScript对象类型(如果有) 要求 可以通过NPM安装NodeJS开发依赖项... npm install 注意仅当添加功能和/或修复错误时,才需要NPM。 在其他项目中不存在基于NPM的依赖关系来...

    json-scriptify:将javascript对象转换为脚本

    将javascript对象转换为脚本 该模块的主要目的是从一个对象生成一个可读且最小长度的脚本,该脚本在被评估时,将一个对象尽可能地返回到原始对象。 :warning: 注意:我们尚未实现安全的解析器。 因此,请勿使用此...

    使用 JavaScript 将 JSON 转换为对象,并使用 DOM API 将其呈现在 HTML 页面.html

    具体来说,我们创建一个 <div> 元素,用于显示转换后的结果,然后遍历对象的所有属性,为每个属性创建一个 <p> 元素,用于显示属性名和属性值,并将其添加到 <div> 元素中。如果 JSON 输入无效,我们将显示一个警告...

    boolean-object:将对象中的属性值转换为布尔值

    布尔对象 将对象中的属性值转换为布尔值。安装 npm install boolean-object用法 var booleanObject = require ( 'boolean-object' )var obj = { foo : 'true' , bar : 'false' , baz : 1 , qux : 0 , str : 'string'...

    json对象与数组以及转换成js对象的简单实现方法

    JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集。 •数据在名称/值对中 •数据由逗号分隔 •花括号保存对象 •方括号保存数组 ...数组可包含多个对象: { employees: [ { firstName:J

    estree-util-value-to-estree:将JavaScript值转换为estree表达式

    estree-util-value-to-stree 将JavaScript值转换为表达式安装npm install estree-util-value-to-estree用法该包将JavaScript值转换为 ,以获取无需上下文即可构造的值。 当前支持以下类型: 数组Bigints 布尔值日期...

    jsfromxml:XML 到 Javascript 对象转换器

    JSfromXML 是一个 XML >< Javascript>"的对象中。 如果一个节点的键只存在一次,它将是一个带有子... 如果一个节点的键存在多次,它将是一个包含所有对象的数组。 属性将包含在具有键"@"的对象中。 节点的值将作为

    objects-to-csv:将JavaScript对象数组转换为CSV文件,可以选择将其保存到文件系统

    将对象数组转换为CSV文件将JavaScript对象数组转换为CSV格式。 您可以将CSV保存到文件或将其作为字符串返回。 数组第一个对象中的键将用作列名。 值中的任何特殊字符(例如逗号)都将被正确转义。用法const ...

    JavaScript 动态网页实例 - 数据类型转换.rar

    类型转换是网页编程不可或缺的内容,本文先介绍自动类型转换,接着是强制性的显式类型转换,最后如何将基本数据类型提升为对象。 JavaScript的数据类型分为基本数据类型和复合数据类型。复合数据类型主要有对象、...

    javascript中JSON对象与JSON字符串相互转换实例

    本文实例讲述了javascript中JSON对象与JSON字符串相互转换实现方法。分享给大家供大家参考。具体如下: [removed] // 根据JSON对象的属性的名称获取属性的值 var jsonObj = { name: "jxqlovejava" }; // JSON对象 ...

    js2schema:将JavaScript对象或数组转换为JSON模式,同时**保持描述并从值的模式中推断出类型**尽我所能

    欢迎来到js2schema :waving_hand: 将JavaScript对象或数组转换为JSON模式,同时保留描述并从值模式中按最佳方式推断类型。 基于但功能更强大,因为js2schema可以做到,最好保留描述并从值的模式推断类型,并能够使用...

    JavaScript笔记

    基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是由事件引发 解释执行:先读到的先执行,后读到的会替代先读的 可以使用任何文本编辑工具编写 JavaScript 代码,...

    json-to-graphql-query:将JavaScript对象转换为GraphQL查询语法的简单模块

    这是一个简单的模块,它采用JavaScript对象并将其转换为GraphQL查询,以发送到GraphQL服务器。 主要用于需要动态生成graphql查询的应用程序。 寻找新的维护者 目前,我与GraphQL的合作并不多,因此,如果有人热衷于...

    100个直接可以拿来用的JavaScript实用功能代码片段(1-10)

    81、原生JavaScript用正则表达式提取页面代码中所有网址 82、原生JavaScript用正则表达式清除相同的数组(低效率) 83、原生JavaScript用正则表达式清除相同的数组(高效率) 84、原生JavaScript用正则表达式按字母排序...

    objectify:将表单转换为嵌套的 Javascript 对象

    Objectify 使用 [PHP/Ruby 名称-属性约定][so] 将表单转换为复杂对象。 这样做的原因是将表单序列化的值与其向用户的呈现分离。 从表单获取数据不应该是紧耦合到您的标记。 有关此参数格式的更多信息,请参阅 ...

    01 JavaScript基本语法.ppt

    parseInt() 和 parseFloat() 函数将字符串分别转换为整型和小数 运算符号分为算术运算符、比较运算符、逻辑运算符 分支结构 条件语句分为if语句,if-else语句、if的嵌套 多分支语句switch根据表达式的值,进入不同的...

    程序天下:JavaScript实例自学手册

    14.13 获取JavaScript函数中的所有参数 14.14 奇偶数的判断 14.15 在JavaScript运行VBScript函数 14.16 购物篮中常用的计算总价效果 14.17 同一用户的来访统计 14.18 十六进制转换为十进制 14.19 将URL转化为16进制 ...

    javascript学习笔记.docx

    4) 在比较运算中,若一个对象或值被转换成NaN(Not a Number),则永远返回false。 5) in可以检查指定字符串是否是一个对象的基本属性或方法名称;instanceof运算符返回左边的对象是否右边类的一个实例;delete可以...

    javascript函数的解释

    (先将所有的按钮都显示为绿色,i代表1到5循环); 然后再执行下面一段代码:g('a_'+n).style.backgroundColor='#ff0000';(将当前点击的按钮显示为红色,n指当前点击按钮的编号,是点击菜单传递的一个参数值). ...

    PrintEverything:有助于快速将任何原生对象转换为人类可读字符串的小型 Javascript 函数

    小型 Javascript 函数,可帮助快速将任何本机对象转换为人类可读的字符串。 使用简单的调用函数printThisThing并在第一个参数中使用所需的对象。 此外,可以在第二个参数中传递一个选项对象; 此对象可能包含以下值...

Global site tag (gtag.js) - Google Analytics