JavaScript is well known as a dynamic type, and the type conversion occurs in many cases by the weak type of the scripting language whose data type. These types of conversions are often implicit, which gives us a lot of trouble when using JS. And JS's basic data type conversion is not too much elaborated in this article, the main record JS object data type conversion. The author because of comparative dishes, if there is no wrong to write the place welcome the big guy in the bottom of the message.
1.Number Cast Object
Let a={name:123};console.log (number (a));
We first simply declare an object and use number () to force the type conversion
The results of the operation are as follows:
So let's analyze why the object is forced into a type conversion.
Here you have to mention the JS object with two methods, valueof and ToString.
Let's talk about the valueof method first:
The JavaScript call valueOf
method converts the object to the original value. You seldom need to call the valueOf
method yourself, and JavaScript will call it automatically when you encounter an object that expects the original value.
By default, the valueOf
method is Object
inherited by each subsequent object. Each built-in core object overrides this method to return the appropriate value. If the object has no original value, the valueOf
object itself is returned.
Many of the built-in objects of JavaScript rewrite the function to make it more suitable for its own functional needs. Therefore, the return and return value types of the valueof () method for different types of objects may be different.
The above description derives from the description of the valueof method from the MDN, and the return values for the different data types valueof are given below:
Note that the return value above is the return value if you do not have a function that overwrites the original valueof.
In the table above we can see clearly that the value returned by the object is the object itself, the result is as follows:
Now let's talk about the ToString method
The return value for an object that does not overwrite the ToString method should be:
So what is the relationship between these two approaches and the coercion type conversion of an object?
In fact, when the number () coercion type converts the object, the following actions are performed:
1. Call the object's ValueOf method first
2. Determine if the return value of the method is the underlying data type (NUMBER,STRING,BOOLEAN,UNDEFINED,NULL)
3. If the return value is the underlying data type, the conversion rule converts it according to the conversion rules of the corresponding data type
4. If the return value is not the underlying data type, continue calling the ToString method on the basis of the return value
5. Determine if the return value of ToString is the underlying data type
6. Determine whether the underlying data type, if the underlying data type, operates 3
7. If the underlying data type is still not an error
Here we verify these steps:
This seems to explain the pass, then let's see if the return value of ToString is still an object to see if the browser will be error:
Sure enough, when the ToString return value is still the object, JS error
So we're going to verify what happens if the return value of the first call to valueof is the underlying data type?
So the procedure for number casting of objects is as above 7 steps
2.String Cast Object
First of all, a simple object is still first declared.
In order to differentiate it from the above we create an object b{name:b}
From what we can see, the result of the cast is "[Object Object]"
The following is the decryption time:
In fact, the steps for a string cast object are similar to number, and are divided into similar 7 steps:
1. Call the object's ToString method first
2. Determine if the return value of the method is the underlying data type (NUMBER,STRING,BOOLEAN,UNDEFINED,NULL)
3. If the return value is the underlying data type, the conversion rule converts it according to the conversion rules of the corresponding data type
4. If the return value is not the underlying data type, continue calling the ValueOf method on the basis of the return value
5. Determine whether the return value of the valueof is the underlying data type
6. Determine whether the underlying data type, if the underlying data type, operates 3
7. If the underlying data type is still not an error
The difference between string and number is that
Number is called valueof before calling ToString
The string is called by ToString before calling valueof
For convenience, this is illustrated in a single diagram:
So that's how the string transforms the object.
3.Boolean Cast Object
We know that there are only 5 values in JS that can be false at the time of judgment.
1.undefined
2.null
3. '//empty string
4.0
5.NaN
The other values are true at the time of the judgment, and if is determined by using a Boolean to convert the
So the value of the Boolean conversion of the object is True
——————————————————————————————————————————————————————————————————
So the answers to some interesting interview questions are explained:
{}+{}
{}+[]
[]+[]
[]+{}