A brief analysis of implicit type conversion in JavaScript

  • 2020-03-30 00:43:57
  • OfStack

If you explicitly cast one type to another through a function or method call, it is called a display cast, and conversely, it is called an implicit cast. Google and wikipedia don't have the words "show cast" or "implicit cast." Let's call it that.

I. implicit type conversion in operation

1, the + operator


var a = 11, b = '22'; 
var c = a + b; 

Here the engine is going to turn a into a string "11" and then it's going to connect to b, and it's going to be "1122". Some people wonder, why don't you just turn b into the number 22 and do the arithmetic addition, so that c is 33. There's no reason why, but the js engine specifies string concatenation rather than arithmetic addition when one of the two sides of the operator "+" is a numeric type and the other is a string type. The operator "+" makes it easy to convert Number to String. Such as

var a = 11; 
alert(typeof a); //-->number 
a = a + ''; 
alert(typeof a); //-->string 

2. "-" operator

The "-" can be either unary (negative) or binary (subtraction). Such as


var a = 11, b = '5'; 
var c = a - b; 
alert(typeof c); //--> number 

In contrast to the "+" above, the string b is implicitly converted to the number 5 and arithmetic subtracted. Using this feature, you can easily convert a String to a Number

var a = '11'; 
a = a - ''; 
alert(typeof a);// -->number 

Implicit type conversion in statements

1, if


var obj = {name:'jack'} 
if(obj){ 
    //do more 
} 

This is going to convert obj implicitly to a Boolean type

2, while


var obj = {name:'jack'} 
while(obj){ 
    //do more 
} 

With the if

3. Type conversion when for in
Implicit conversion from identifier to string occurs when defining an object literal.


var person = {'name':'jack',"age":20,school:'PKU'}; 
for(var a in person){ 
    alert(a + ": " + typeof a); 
} 

In this case, single/double quotation marks are added to the name and age respectively to emphasize that they are of type String, and single/double quotation marks are not added to the school. Let's iterate over the properties of the object to see its type. The school is also implicitly converted to String.

The index of an array is also a string type. It's amazing, but it's true. Such as


var ary = [1,3,5,7]; 
for(var a in ary){ 
    alert(a + ": " + typeof a); 
} 

Implicit type conversion in alert

String.prototype.fn = function(){return this}; 
var a = 'hello'; 
alert(typeof a.fn()); //-->object 
alert(a.fn()); //-->hello 

We added an fn method to the String prototype, which returns this. We know that this can be interpreted as an instance object of the current class. Since it is an object, typeof a.fn() naturally returns an object.
The key is the last alert(a.fn()), which returns an object that is implicitly converted to the string "hello".

The same thing happens with number types, such as


Number.prototype.fn = function(){return this}; 
var a = 10; 
alert(typeof a.fn());//-->object 
alert(a.fn()); //-->10 

A.fn () returns an object type, but is implicitly converted to a number when alert(a.fn()) is raised.


Related articles: