javascript基础入门

Javascript - 基本运算符(+,-,*,/,%)

2019-11-11  本文已影响0人  厦门_小灰灰

简单的了解一下 +,-,*,/,%

+(加号运算符)

这里分为一元、二元运算

+ 之 一元运算符

+号运算符作为一元运算符时,加号后面的表达式or变量将进行转换成Number类型

//null
console.log(+null);  //0

//undefined
console.log(+undefined);  //NaN

//boolean
console.log(+true);  //1
console.log(+false);  //0

//string
console.log(+"1");  //1
console.log(+"-1");  //-1
console.log(+"abc");  //NaN
console.log(+"");  //0
console.log(+"   ");  //0

//object
console.log(+{});  //NaN

总结:

+ 之 二元运算符
//number + number
console.log( 1 + 2 );  //3

//number + boolean
console.log( 1 + true );  //2
console.log( 1 + false );  //1

//number + string
console.log( 1 + "2" );  //"12"

//number + null
console.log( 1 + null );  //1

//number + undefined
console.log( 1 + undefined );  //NaN

//string + string
console.log( "1" + "2" );  //"12"

//string + boolean
console.log( "1" + true );  //"1true"

//string + null
console.log( "1" + null );  //"1null"

//string + undefined
console.log( "1" + undefined );  //"1undefined"

//boolean + null
console.log( true + null );  //1

//boolean + undefined
console.log( true + undefined );  //NaN

//null + undefined
console.log( null + undefined );  //NaN

//object + number
console.log( {} + 1 ); //[object Object]1

总结:

所有其他类型的值都会被自动转换成这两种类型(number,string)的值。

加法运算符会触发三种类型转换:

  1. 转换为数字
  2. 转换为字符串
  3. 转换为原始值

通过 ToNumber() 将值转换为数字

ToNumber.png
如果输入的值是一个对象,则会首先会调用 ToPrimitive(obj, Number) 将该对象转换为原始值, 然后在调用 ToNumber() 将这个原始值转换为数字。

通过ToString()将值转换为字符串

ToString.png
如果输入的值是一个对象,则会首先会调用 ToPrimitive(obj, String) 将该对象转换为原始值, 然后再调用 ToString() 将这个原始值转换为字符串。

通过 ToPrimitive() 将值转换为原始值

原始值:undefined,null,boolean,number,string

//可选参数 PreferredType 可以是 Number 或者 String。 它只代表了一个转换的偏好,转换结果不一定必须是这个参数所指的类型,但转换结果一定是一个原始值。
ToPrimitive(input,PreferredType?)
  1. 如果 input 是个原始值,则直接返回它。
  2. 否则,如果 input 是一个对象。则调用 obj.valueOf() 方法。 如果返回值是一个原始值,则返回这个原始值。
  3. 否则,调用 obj.toString() 方法。 如果返回值是一个原始值,则返回这个原始值。
  4. 否则,抛出 TypeError 异常。
  1. 如果 input 是个原始值,则直接返回它。
  2. 否则,调用 obj.toString() 方法。 如果返回值是一个原始值,则返回这个原始值。
  3. 否则,如果 input 是一个对象。则调用 obj.valueOf() 方法。 如果返回值是一个原始值,则返回这个原始值。
  4. 否则,抛出 TypeError 异常。
  1. Date 类型的对象会被设置为 String。
  2. 其它类型的值会被设置为 Number。
var obj = {
    toString(){
        console.log("toString");
        return {};
    },

    valueOf(){
        console.log("valueOf");
        return {};
    }
}

/* 打印结果
valueOf
toString
Uncaught TypeError: Cannot convert object to primitive value
*/
console.log(Number(obj)); 

-(减号运算符)

这里分为一元、二元运算,其中一元运算符跟+是一样的,二元运算符也跟+差不多,少了字符串拼接的功能。
总结:

console.log(2-1); //1
console.log( 2 - 'a' );  //NaN
console.log(2-undefined);  //NaN

console.log(2-null);  //2

console.log( 2 - "1" );  //1

console.log( 2 - 'a' );  //NaN
console.log( 2 - {} ); //NaN

* (乘号运算符)

//number * number
console.log(1 * 2);  //2

//number * string
console.log(1 * "2");  //2

//number * boolean
console.log(1 * true);  //1

//number * null
console.log(1 * null);  //0

//number * undefined
console.log(1 * undefined);  //NaN

//string * boolean
console.log("2" * true );  //2

//string * null
console.log("2" * null);  //0

//string * undefined
console.log("2" * undefined);  //NaN

//boolean * null
console.log(true * null);  //0

//boolean * undefined
console.log(true * undefined);  //NaN

//undefined * null
console.log(undefined * null);  //NaN

整体逻辑和-差不多;

/ (除号运算符),%(求余运算符)

整体逻辑和*差不多,都是先转换成number类型

注:关于对象的类型转换,这篇文章没有什么说明,后续学习到对象的时候,将继续补充。

上一篇 下一篇

猜你喜欢

热点阅读