>  기사  >  웹 프론트엔드  >  JavaScript [번역]_javascript 스킬에서 값을 문자열로 변환하는 방법 분석

JavaScript [번역]_javascript 스킬에서 값을 문자열로 변환하는 방법 분석

WBOY
WBOY원래의
2016-05-16 17:49:43941검색

译者注:前两天在看ES5的时候顺便出了一道题,今天看到这篇文章,刚好解释的很清楚,就翻译了一下.
在JavaScript中,主要有三种方法能让任意值转换为字符串.本文讲解了每种方法以及各自的优缺点.

1.转换字符串的三种方法
这三种将value转换为字符串的方法是:

1.value.toString()
2."" + value
3.String(value)

第一种方法存在的问题是,它不能把null和undefined转换为字符串.还有第二种和第三种方法,这两种方法的效果基本一样.

•""+value: 使用加法运算符配合一个空字符串可以把任意值转换为字符串,我觉得这种方法代码的可读性很差,但相对String(value)来,还是有一些人更喜欢用这种转换方式.
•String(value): 这种方法可读性更好,唯一的问题是,这种函数调用可能会迷惑一些人,尤其是那些熟悉Java的的程序员,因为String同时也是一个构造函数.要注意的是它作为普通函数和作为构造函数时的表现完全不同:

复制代码 代码如下:

> String("abc") === new String("abc")
false

> typeof String("abc")
'string'
> String("abc") instanceof String
false

> typeof new String("abc")
'object'
> new String("abc") instanceof String
true


String作为普通函数时会产生一个字符串(一个原始值).作为构造函数时会产生一个String对象的实例.后者在JavaScript中很少用到,所以基本上你可以忽略掉String作为构造函数的用法,但一定要记得它是个转换函数.

2.""+value 和 String(value)的细微差别
到现在你已经知道了+ 和 String()都可以将它们的“参数”转换为字符串.但他们的转换方式还是着有细微的差别,不过几乎所有的情况下,转换结果都是一样的.

2.1 将原始值转换为字符串
这两种方法都是使用引擎内部的ToString()操作将原始值转换为字符串的.“内部操作”的意思是:这个操作函数是在ECMAScript 5.1 (§9.8)中定义的,但ES语言本身并不能访问到它.下面这个表格解释了ToString()是如何转换原始值的.

参数 结果
undefined "undefined"
null "null"
布尔值 "true"或者"false"
数字 数字作为字符串,比如"1.765"
字符串 无需转换

2.2 객체 값을 문자열로 변환

두 방법 모두 먼저 객체 값을 기본 값으로 변환한 다음 기본 값을 문자열로 변환합니다. 내부 ToPrimitive(Number) 연산이 사용되는 반면(날짜 객체가 변환되지 않는 한) String()은 ToPrimitive(String)을 사용합니다.

•ToPrimitive(Number): 객체를 다음으로 변환합니다. 값을 프리미티브로 변환합니다. 값을 반환하려면 먼저 obj.valueOf()를 호출하고, 반환 값이 기본 값이면 obj.toString()을 다시 호출합니다. 그렇지 않으면 TypeError 예외가 발생합니다.
•ToPrimitive(String): obj.valueOf() 대신 obj.toString() 메서드가 먼저 호출된다는 점을 제외하면
다음 객체를 사용하면 이들 간의 차이점을 확인할 수 있습니다.
코드를 복사합니다. 코드는 다음과 같습니다.

var obj = {
valueOf: function () {
console.log("valueOf");
return {}; // 원래 값이 아님, 계속 실행
🎜>toString: function () {
console.log("toString");
return {}; // 원래 값이 아님, 계속 실행
}

//실행:
> "" obj
valueOf
toString
TypeError: 객체를 기본 값으로 변환할 수 없습니다.

> String(obj)
toString
valueOf
TypeError : 객체를 원시값으로 변환할 수 없습니다


2.3 결과는 대개 동일합니다
위에 언급한 차이점은 실제 상황에서는 거의 불가능합니다. 이유: 대부분의 객체는 모두 기본 상속된 valueOf() 메서드를 사용하며 반환 값은 항상 객체 자체입니다.


> var x = {}
> x.valueOf() === x
true


따라서 ToPrimitive(Number)는 일반적으로 valueOf 메서드를 건너뛰고 toString() 메서드의 반환 값을 반환합니다. 이는 ToPrimitive(String)와 정확히 동일하게 동작합니다. Boolean, Number 또는 String 인스턴스인 경우 해당 valueOf()는 기본 값(이 객체로 래핑되기 전의 원래 값)을 반환합니다. 그런 다음 이 두 작업은 다음과 같이 수행됩니다.

•ToPrimitive(Number )는 객체의 valueOf( ) 메서드의 반환 값(래핑 전의 원래 값)과 ToString() 작업 후의 결과를 반환합니다.
•ToPrimitive(String)는 객체의 toString() 메서드의 반환 값(객체의 래핑되기 전의 원래 값) 원래 값에 대한 ToString() 작업의 반환 값)
이런 식으로 여전히 동일한 결과를 반환하지만 변환 방법은 다릅니다.


3. 결론
다른 유형의 값을 문자열로 변환하려면 어떤 방법을 선택해야 합니까? 값이 null 또는 정의되지 않음을 보장할 수 있다면 value를 사용할 수 있습니다. toString()을 사용하여 변환합니다." "개인 취향에 따라 다를 수 있습니다.


4.


    자바스크립트 값: 모든 것이 객체는 아니다
  1. [프리미티브 값과 객체 값의 차이]
  2. JavaScript에서 {} {}란 무엇인가요?
  3. [연산자의 작동 방식을 설명했습니다.]
  4. JavaScript의 문자열 연결
  5. [여러 문자열을 더 효과적으로 연결하는 방법]
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.