原文: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
)基本上具有相同的效果,但作为一个函数,它更好地描述了哦一个事实:并不是每次都需要创建新的对象。
相关阅读:
- JavaScript 并非所有的东西都是对象
分享到:
相关推荐
`JSON.stringify()`是JavaScript中的全局函数,用于将JavaScript值转换为JSON字符串。它的语法如下: ```javascript JSON.stringify(value, [replacer], [space]) ``` - `value`:要转换的JavaScript值,可以是...
- `toString()`: 将数字转换成字符串。 - `length`: 返回字符串的长度。 - `charAt()`: 返回指定索引位置的字符。 - `charCodeAt()`: 返回指定索引位置的字符的ASCII码。 - `fromCharCode()`: 创建一个由字符的ASCII...
在现代JavaScript中,更推荐使用`JSON.stringify()`方法,这是一种更简洁、更标准的方式,可以将JavaScript值转换为JSON字符串: ```javascript const array = [1, 2, 3]; const jsonString = JSON.stringify(array)...
3. `String()` 函数:这是一个全局函数,可以将任何类型的值转换为字符串。例如,`String(42)` 将返回字符串 `'42'`。对于null和undefined,它们转换后分别为 `'null'` 和 `'undefined'`。 4. `toString()` 方法:...
总的来说,将JSON字符串转换为对象是前端开发和后端交互过程中不可或缺的步骤,熟练掌握这一技能对于任何涉及数据交换的项目都至关重要。理解JSON.parse()的工作原理,以及使用相关的工具进行验证和调试,都将大大...
为了实现`stringify`,我们可以遍历对象的所有属性,并将它们转换为字符串。对于`parse`,我们需要解析输入的字符串,处理引号、冒号、逗号等特殊字符,并构建一个新的JavaScript对象。 这个项目可能包括以下部分:...
在这个阶段,JavaScript引擎将源代码转换为抽象语法树(AST)。引擎还会进行词法分析,识别变量声明、函数定义等,并进行作用域分析。 #### 执行阶段 执行阶段分为全局执行上下文(Global Execution Context)和...
2. **JavaScript的`JSON.stringify()`方法**:在JavaScript中,`JSON.stringify()`是用于将JavaScript值转换为JSON字符串的关键函数。它可以接受三个参数:要序列化的值、替换函数(可选)和缩进字符或空格数(可选...
- `Boolean()`函数:将任何值转换为布尔类型。在JavaScript中,只有`null`、`undefined`、`NaN`、`""`(空字符串)、`0`和`false`会被转换为`false`,其他所有值都会被转换为`true`。 在实际编程中,理解并熟练...
它适合所有层次的JavaScript开发者阅读,无论是初学者还是经验丰富的开发者都能从中获得有价值的信息。本书覆盖了从基础语法到高级主题的所有方面,同时还关注了语言的新特性和发展趋势,是学习JavaScript不可或缺的...
- `JSON.stringify()`: 将JavaScript值(对象或数组)转换为JSON字符串。例如,`JSON.stringify(obj)`。 - `JSON.parse()`: 将JSON字符串转换回JavaScript值。例如,`JSON.parse(jsonStr)`。 4. **注意事项**: ...
javascript常用对象及方法 javascript中有许多常用的对象和方法,了解这些对象和方法可以帮助我们更好地...这些对象和方法都是javascript中的基本组成部分,了解它们可以帮助我们更好地使用javascript,提高开发效率。
* 封装:将对象的属性和方法封装在一起,隐藏实现细节,提高代码安全性和可维护性。 在JavaScript中,我们可以使用函数对象来实现面向对象的编程。函数对象可以作为值赋给变量、作为参数传递给另一个函数、或作为...
3. **Boolean**:JavaScript中所有值都可以隐式地转换成布尔值。`true`和`false`是唯一的布尔值,其他数据类型可以根据特定规则转换为布尔值。 - **布尔值与其他类型的关系**:在某些情况下,如条件语句中,其他...
1. **使用 `new` 关键字**:通过`new String(s)`的形式创建,其中`s`是要存储或转换成字符串的值。 2. **直接调用**:仅使用`String(s)`形式,这种方式会直接返回字符串而非`String`对象。 **属性** `String`对象...
3. 对象转换:可能提供了将对象的属性值转换成特定类型的功能。 4. 日期和时间处理:将日期字符串转换为Date对象,或将日期对象格式化为各种字符串格式。 5. JSON处理:将JSON字符串解析为JavaScript对象,或将对象...
JavaScript 实现数字转换成中文是一种常见的编程需求,特别是在处理金融、会计等领域,中文数字的表示方式更加直观且符合中文阅读习惯。以下是一个简单的 JavaScript 函数,用于将阿拉伯数字转换为中文数字。 首先...