2 .比较操作符 ==
3 .+,-
4 . 点 号操作符
5 .在对数字,字符串进行点操作方法时,默认将数字,字符串转成对象
5 .关系符比较的时候
1 .
1 .null 转为“null”
2 .undefined 转为 “undefined”
3 .Boolean true转为“true”,false转为“false”
4 .number :11 转化为“11”,11e20 科学计数法转为“1.1e+21”
5 .数组,空数组转为字符串“”,如果数组中有null,或者undefined,同样当作空字符串处理,[1,2,3,4]="1,2,3,4"
6 .函数function a(){}转为字符串为 “function a(){}”
7 .一般对象:“[object,object]”
8 .NaN "NaN"
1 .只有null,undefined,0,false,NaN,空字符串,这6种情况转为布尔值的结果为false,其余都是true
2 .转换为布尔值得场景
1 .null 0
2 .undefined NaN
3 .Boolean true 1,false 0
4 .字符串:纯数字的字符串,转为对应的数字,空字符串转为0,其余都是NaN
5 .数组,数组首先会被转换为原始类型,然后根据上面的原始类型转换规则进行转换
6 .对象,和数组一样 {}=NaN
7 .NaN NaN
1 .Data对象会先调用toString
2 .当对象转为其他原始类型时,会先调用对象的valueOf方法,如果valueOf方法返回的是原始类型,直接返回这个原始类型
3 .返回的不是原始类型,或者valueOf方法不存在,继续调用toString()方法。如果toString()返回的是这个原始类型。直接返回这个原始类型,如果不是原始类型,直接报错
1 .将一个值转换为他为真正的布尔值
2 .!![] false ![]==true
1 .字符串和数字类型相比较的时候,字符串会被转换为数字类型
2 .布尔值和其他类型值比较
3 .null ,undefined 和其他类型的比较
4 .js规定null,undefined宽松都与自己相等,但是与其它值都不相等
1 .会把对象按照对象转换规则转换成原始类型,再次比较
1 .如果两个对象指向同一个对象,相等操作符返回true,否则返回 false
1 .字符串连接符的情况
你要了解一个词"Hoisting"
声明语句会被自动提升到所属作用域顶端.这是一种默认行为.
比如:
red = 100var red //这一句会被自动提升到作用域的顶端.
console.log(red)
// 由于默认提升的行为,以上代码与以下代码等同
var red
red = 100
console.log(red)
需要注意的是,默认仅提升声明,而不是初始化(赋值). 比如:
/** e.g.1 */console.log(x) //会报错,提示not defined
/** e.g.2 */
console.log(x) //不会报错,因为var自动提升到了当前作用域的顶部
var x = 456
// 相当于如下代码
var x //仅声明被提升
console.log(x)
x = 456 //初始化(赋值)不被提升. // 还是举例
/** e.g.3 */
console.log(x)
var x = 1
function f() {
console.log(x)
var x = 2
console.log(x)
}
f()
console.log(x)
//以上代码可以类比为:
var x
console.log(x)
x = 1
function f() {
var x
console.log(x)
x = 2
console.log(x)
}
f()
console.log(x)
//所以结果为undefined,undefined,2,1