类型是如何相互转换的
运算规则咱们得搞清楚这三个东西:
- 类型转换规则
- 运算规则
- 表达式
类型转换规则主要分为四种情况
- 原始类型->数字类型
ture:1,
false:0,
null:0,
undefined:NaN,
string分为2中情况,空字符串(包含空白字符):0,去掉引号,不是数字就是NaN
- 所有类型->布尔类型
null:false,
undefind:false,
number:0是false,其他的是true,
string:空字符串是false,NaN是false,其他是true,
对象:true
- 原始类型->字符串
null: 'null',
undefined: 'undefined',
number: '数字',
boolean: true是'true',false是'false'
- 对象类型->原始类型
先调用valueOf()再调tostring()
数据是如何运算的
算数运算(+,-,*,/,%,++,--)
首先转换成原始类型,转换成数字运算
特殊情况:x+y,x和y有一方是字符串,转换成字符串,然后拼接
特殊情况:NaN和任何类型运算得到的还是NaN
比较运算(>,<,>=,<=,==,!=,===,!===)
>,<,>=,<=
转换成原始类型,然后比较
特殊情况:两端全是字符串,比较字典顺序
特殊情况:两端都是NaN,一定为false
===
类型和值必须都相同
特殊情况:两端存在NaN,一定为false
==
两端类型相同,比较值
两端都是原始类型,转换成数字比较
一端是原始类型,一端是对象类型,把对象转换成原始类型比较
特殊情况:undefined和null只有与自身比较,或者相互比较时,才会返回true,
特殊情况:两端存在NaN,一定为false
!==,!=
对相等取反
逻辑运算符(&&,||)
转换成Boolean
x&&y,x为false返回x,x为true,返回y
x||y,x为false返回y,x为ture,返回x