`
artdialog
  • 浏览: 105371 次
  • 性别: 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  
欢迎转载。

相关推荐

    javascript对象转换成json

    `JSON.stringify()`是JavaScript中的全局函数,用于将JavaScript值转换为JSON字符串。它的语法如下: ```javascript JSON.stringify(value, [replacer], [space]) ``` - `value`:要转换的JavaScript值,可以是...

    javascript:对象化编程

    - `toString()`: 将数字转换成字符串。 - `length`: 返回字符串的长度。 - `charAt()`: 返回指定索引位置的字符。 - `charCodeAt()`: 返回指定索引位置的字符的ASCII码。 - `fromCharCode()`: 创建一个由字符的ASCII...

    将数组转换成JSON对象

    在现代JavaScript中,更推荐使用`JSON.stringify()`方法,这是一种更简洁、更标准的方式,可以将JavaScript值转换为JSON字符串: ```javascript const array = [1, 2, 3]; const jsonString = JSON.stringify(array)...

    Javascript的数据类型转换

    3. `String()` 函数:这是一个全局函数,可以将任何类型的值转换为字符串。例如,`String(42)` 将返回字符串 `'42'`。对于null和undefined,它们转换后分别为 `'null'` 和 `'undefined'`。 4. `toString()` 方法:...

    将json字符串转换为对象

    总的来说,将JSON字符串转换为对象是前端开发和后端交互过程中不可或缺的步骤,熟练掌握这一技能对于任何涉及数据交换的项目都至关重要。理解JSON.parse()的工作原理,以及使用相关的工具进行验证和调试,都将大大...

    纯javascript实现json与对象的互相转换项目

    为了实现`stringify`,我们可以遍历对象的所有属性,并将它们转换为字符串。对于`parse`,我们需要解析输入的字符串,处理引号、冒号、逗号等特殊字符,并构建一个新的JavaScript对象。 这个项目可能包括以下部分:...

    JavaScript对象模型-执行模型

    在这个阶段,JavaScript引擎将源代码转换为抽象语法树(AST)。引擎还会进行词法分析,识别变量声明、函数定义等,并进行作用域分析。 #### 执行阶段 执行阶段分为全局执行上下文(Global Execution Context)和...

    Json将对象转换成字符串

    2. **JavaScript的`JSON.stringify()`方法**:在JavaScript中,`JSON.stringify()`是用于将JavaScript值转换为JSON字符串的关键函数。它可以接受三个参数:要序列化的值、替换函数(可选)和缩进字符或空格数(可选...

    JavaScript程序设计课件:数据类型转换.pptx

    - `Boolean()`函数:将任何值转换为布尔类型。在JavaScript中,只有`null`、`undefined`、`NaN`、`""`(空字符串)、`0`和`false`会被转换为`false`,其他所有值都会被转换为`true`。 在实际编程中,理解并熟练...

    JavaScript:The.Definitive.Guide 6th edition

    它适合所有层次的JavaScript开发者阅读,无论是初学者还是经验丰富的开发者都能从中获得有价值的信息。本书覆盖了从基础语法到高级主题的所有方面,同时还关注了语言的新特性和发展趋势,是学习JavaScript不可或缺的...

    json与对象相互转换系列处理

    - `JSON.stringify()`: 将JavaScript值(对象或数组)转换为JSON字符串。例如,`JSON.stringify(obj)`。 - `JSON.parse()`: 将JSON字符串转换回JavaScript值。例如,`JSON.parse(jsonStr)`。 4. **注意事项**: ...

    javascript常用对象及方法

    javascript常用对象及方法 javascript中有许多常用的对象和方法,了解这些对象和方法可以帮助我们更好地...这些对象和方法都是javascript中的基本组成部分,了解它们可以帮助我们更好地使用javascript,提高开发效率。

    面向对象javascript

    * 封装:将对象的属性和方法封装在一起,隐藏实现细节,提高代码安全性和可维护性。 在JavaScript中,我们可以使用函数对象来实现面向对象的编程。函数对象可以作为值赋给变量、作为参数传递给另一个函数、或作为...

    JavaScript学习深入—面向对象编程

    3. **Boolean**:JavaScript中所有值都可以隐式地转换成布尔值。`true`和`false`是唯一的布尔值,其他数据类型可以根据特定规则转换为布尔值。 - **布尔值与其他类型的关系**:在某些情况下,如条件语句中,其他...

    JavaScript_对象参考手册

    1. **使用 `new` 关键字**:通过`new String(s)`的形式创建,其中`s`是要存储或转换成字符串的值。 2. **直接调用**:仅使用`String(s)`形式,这种方式会直接返回字符串而非`String`对象。 **属性** `String`对象...

    convertjs一个简单的JavaScript转换库

    3. 对象转换:可能提供了将对象的属性值转换成特定类型的功能。 4. 日期和时间处理:将日期字符串转换为Date对象,或将日期对象格式化为各种字符串格式。 5. JSON处理:将JSON字符串解析为JavaScript对象,或将对象...

    JavaScript实现把数字转换成中文

    JavaScript 实现数字转换成中文是一种常见的编程需求,特别是在处理金融、会计等领域,中文数字的表示方式更加直观且符合中文阅读习惯。以下是一个简单的 JavaScript 函数,用于将阿拉伯数字转换为中文数字。 首先...

Global site tag (gtag.js) - Google Analytics