# js 运算符

# 背景

运算符是一门语言中较为基础的内容,但是小小的运算符可以挖出大大的坑,下面介绍一下js中容易出错的运算符以及类型转换。

如果发现文中错误欢迎指出,谢谢~

# 运算符

# 一元运算符

  • delete:删除对象某个属性
delete object.property
delete object['property']
  • typeof:判断给定对象的类型
typeof 10 === 'number'
  • +:计算操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值
+3 //3
+"3" //3
+true //1
+false //0
+null //0
+"name" //NaN
+function(val){return val} //NaN
  • -:将操作数转换为number类型并取反
-3 //-3
-"4" //-4

# 算数运算符

  • +:加法用于数值求和或者字符串拼接
操作类型\结果类型 Number Boolean String
Number Number Number String
Boolean Number Number String
String String String String
  • -:减法用于求两个操作数的差值

可以看出减法操作是首先进行类型转换,转换为数值再计算,否则就NaN

console.log("1"-2) //-1
console.log(2-"1") //1
console.log(2-true) //1
console.log(2-false) //2
console.log(2-null) //2
console.log(3-'a') //NaN
console.log(1-function(val){}) //NaN

# 关系运算符

  • 比较运算符:< > <= >= in instanceof注意如下特殊规则:
* 比较数字和字符串,字符串会转为数字值。
* 比较数字和布尔,布尔会转换为数字值。其中true转换为1false转换为0* 比较对象和数字/字符串,返回对象的默认值。
* 比较对象和对象,将作为对象进行比较。当引用相同对象时才为true
  • == | !=:标准相等操作符

当两个操作数类型不相等时,会在比较前尝试将其转换为相同类型。

  • === | !==:严格相等操作符

如果操作数类型不同则会永远返回false。

  • instanceof:测试构造函数的property是否出现在原型链中的任何位置。
function Person(name, age) {
    this.name = name
    this.age = age
}

var me = new Person('玉面飞龙', 18)

console.log(me instanceof Person) //true
console.log(me instanceof Object) //true
console.log(Person.prototype instanceof Object) //true