search
HomeWeb Front-endFront-end Q&AJavaScript type conversion (detailed explanation and examples)

This article brings you knowledge about type conversion in JavaScript. Converting values ​​to primitive values, converting to numbers and converting to strings corresponds to the three abstract operations inside the engine: ToPrimitive() , ToNumber(), ToString(), I hope it will be helpful to everyone.

JavaScript type conversion (detailed explanation and examples)

JavaScript addition rules

In JavaScript, the rules for addition are actually very simple, there are only two Situation:

  • Add numbers to numbers

  • Add strings to strings

All other types of values ​​will be automatically converted into these two types of values

In JavaScript, there are two types of values:

  • The original values ​​are: undefined, null, boolean, number, string, symbol

  • Object value: all other values ​​are object type values, including arrays (arrays) and functions

Type conversion

The addition operator triggers three type conversions: Convert the value to a primitive value, a number, and a string, which correspond to the three abstract operations inside the JavaScript engine: ToPrimitive(), ToNumber(), ToString()

Convert the value to the original value through ToPrimitive()

ToPrimitive(input, PreferredType?)

The optional parameter PreferredType can be Number or String, which only represents a conversion preference, and the conversion result does not necessarily have to be The type pointed to by this parameter, but the conversion result must be a primitive value. If the PreferredType is marked as Number, the following operations will be performed to convert the input value (§9.1):

  • If the input value is already a primitive value, return it directly.

  • Otherwise, if the input value is an object, call the valueOf() method of the object. If valueOf( ) method's return value is a primitive value, then return this primitive value.

  • Otherwise, call the toString() method of this object. If the return value of the toString() method is a primitive value, the original value is returned.

  • Otherwise, a TypeError exception is thrown.

If the PreferredType is marked as String, the conversion operation The order of the second and third steps will be reversed. If there is no PreferredType parameter, the value of PreferredType will be automatically set according to the following rules: Date type objects will be set to String, and other types of values ​​will be set to Number. .

Convert the value to a number through ToNumber()

JavaScript type conversion (detailed explanation and examples)

If the input value is an object , then ToPrimitive(obj, Number) will be called first to convert the object into a primitive value, and then ToNumber() will be called to convert the primitive value into a number.

Through ToString() Convert the value to a string

JavaScript type conversion (detailed explanation and examples)

If the input value is an object, ToPrimitive(obj, String) will be called first to convert the object as the original value, and then call ToString() to convert the original value to a string.

demo

var obj = {
    valueOf: function () {
        console.log("valueOf");
        return {}; // 没有返回原始值
    },
    toString: function () {
        console.log("toString");
        return {}; // 没有返回原始值
    }
}

Number is used as a function When called (rather than as a constructor), the ToNumber() operation is called internally within the engine:

Number(obj)
// output
valueOf
toString
Uncaught TypeError: Cannot convert object to primitive value
String(obj)
// output
toString
valueOf
Uncaught TypeError: Cannot convert object to primitive value

Addition

    value1 + value2

In calculation When expressing this expression, the operation steps are as follows:

  • Convert the two operands into original values ​​(the following is the mathematical notation, not the JavaScript code):

    prim1 := ToPrimitive(value1)
    prim2 := ToPrimitive(value2)

PreferredType is omitted, so the value of Date type uses String, and the value of other types uses Number.

  • If either prim1 or prim2 is a string, Then convert the other one into a string, and then return the result of the two string concatenation operations;

  • Otherwise, convert both prim1 and prim2 into numeric types, and return their sum .

[] []

Output: ''

[] will be converted to For a primitive value, first try the valueOf() method and return the array itself (this):

> var arr = [];
> arr.valueOf() === arr
true

Such a result is not a primitive value, so call the toString() method again and return an empty string (which is a primitive value ). Therefore, the result of [] [] is actually the concatenation of two empty strings.

> [] + {}
'[object Object]'

{} {}

Output: NaN

  • The JavaScript engine interprets the first {} as an empty code block and ignores it

  • The plus sign here is not It is not a binary operator representing addition, but a unary operator, which converts the operands following it into numbers, exactly the same as the Number() function. For example:

+{}
Number({})
Number({}.toString())  // 因为{}.valueOf()不是原始值
Number("[object Object]")
NaN
> {} + []
0
  • {} 忽略

  • +[] = Number([]) = Number([].toString()) = Number("") = 0

有趣的是,Node.js的REPL在解析类似的输入时,与Firefox和Chrome(和Node.js一样使用V8引擎)的解析结果不同.下面的输入会被解析成一个表达式,结果更符合我们的预料:

> {} + {}
'[object Object][object Object]'
> {} + []
'[object Object]'

总结

对象.valueOf() === 对象

数组对象.toString() === 数组对象.join()

对象.toString() === "[object Object]"

Javacript 中 + 号工作:

  • 数字 + 数字

  • 字符串 + 字符串

【相关推荐:javascript学习教程

The above is the detailed content of JavaScript type conversion (detailed explanation and examples). For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:掘金. If there is any infringement, please contact admin@php.cn delete
The Size of React's Ecosystem: Navigating a Complex LandscapeThe Size of React's Ecosystem: Navigating a Complex LandscapeApr 28, 2025 am 12:21 AM

TonavigateReact'scomplexecosystemeffectively,understandthetoolsandlibraries,recognizetheirstrengthsandweaknesses,andintegratethemtoenhancedevelopment.StartwithcoreReactconceptsanduseState,thengraduallyintroducemorecomplexsolutionslikeReduxorMobXasnee

How React Uses Keys to Identify List Items EfficientlyHow React Uses Keys to Identify List Items EfficientlyApr 28, 2025 am 12:20 AM

Reactuseskeystoefficientlyidentifylistitemsbyprovidingastableidentitytoeachelement.1)KeysallowReacttotrackchangesinlistswithoutre-renderingtheentirelist.2)Chooseuniqueandstablekeys,avoidingarrayindices.3)Correctkeyusagesignificantlyimprovesperformanc

Debugging Key-Related Issues in React: Identifying and Resolving ProblemsDebugging Key-Related Issues in React: Identifying and Resolving ProblemsApr 28, 2025 am 12:17 AM

KeysinReactarecrucialforoptimizingtherenderingprocessandmanagingdynamiclistseffectively.Tospotandfixkey-relatedissues:1)Adduniquekeystolistitemstoavoidwarningsandperformanceissues,2)Useuniqueidentifiersfromdatainsteadofindicesforstablekeys,3)Ensureke

React's One-Way Data Binding: Ensuring Predictable Data FlowReact's One-Way Data Binding: Ensuring Predictable Data FlowApr 28, 2025 am 12:05 AM

React's one-way data binding ensures that data flows from the parent component to the child component. 1) The data flows to a single, and the changes in the state of the parent component can be passed to the child component, but the child component cannot directly affect the state of the parent component. 2) This method improves the predictability of data flows and simplifies debugging and testing. 3) By using controlled components and context, user interaction and inter-component communication can be handled while maintaining a one-way data stream.

Best Practices for Choosing and Managing Keys in React ComponentsBest Practices for Choosing and Managing Keys in React ComponentsApr 28, 2025 am 12:01 AM

KeysinReactarecrucialforefficientDOMupdatesandreconciliation.1)Choosestable,unique,andmeaningfulkeys,likeitemIDs.2)Fornestedlists,useuniquekeysateachlevel.3)Avoidusingarrayindicesorgeneratingkeysdynamicallytopreventperformanceissues.

Optimizing Performance with useState() in React ApplicationsOptimizing Performance with useState() in React ApplicationsApr 27, 2025 am 12:22 AM

useState()iscrucialforoptimizingReactappperformanceduetoitsimpactonre-rendersandupdates.Tooptimize:1)UseuseCallbacktomemoizefunctionsandpreventunnecessaryre-renders.2)EmployuseMemoforcachingexpensivecomputations.3)Breakstateintosmallervariablesformor

Sharing State Between Components Using Context and useState()Sharing State Between Components Using Context and useState()Apr 27, 2025 am 12:19 AM

Use Context and useState to share states because they simplify state management in large React applications. 1) Reduce propdrilling, 2) The code is clearer, 3) It is easier to manage global state. However, pay attention to performance overhead and debugging complexity. The rational use of Context and optimization technology can improve the efficiency and maintainability of the application.

The Impact of Incorrect Keys on React's Virtual DOM UpdatesThe Impact of Incorrect Keys on React's Virtual DOM UpdatesApr 27, 2025 am 12:19 AM

Using incorrect keys can cause performance issues and unexpected behavior in React applications. 1) The key is a unique identifier of the list item, helping React update the virtual DOM efficiently. 2) Using the same or non-unique key will cause list items to be reordered and component states to be lost. 3) Using stable and unique identifiers as keys can optimize performance and avoid full re-rendering. 4) Use tools such as ESLint to verify the correctness of the key. Proper use of keys ensures efficient and reliable React applications.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment