题目一:
let result=100+true +21.2+null+undefined+"Tencent"+[ ]+null+9+false
console.log(result)
解析:
数据类型
1 基本数据类型:number boolean string bigint symbol null undefined
2 引用数据类型:object function
加号“+”只要一侧出现string 或者 object 则结果为字符串
对象+数字,对象先变成字符串(toString()) 再变成数字
null变成数字0 ;undefined变为NaN ;任何数字+NaN都为NaN
parseInt( ) parseFloat()
隐式转换:先判断是不是数字 isNaN(value)
加号只要一侧有字符串则表示字符串拼接
空数组变为字符串是空字符串
空对象则不是({}).toString//=>[object Object]
{}+0=0
0+{}=0[object Object]
把其它数据类型转化为数字
特定需要转化为Number类型的
+Number([val])//=>Number('0012')=12
把其他类型转化为字符串类型
().toString()
String()
隐式转换:加号只要一边是字符串,结果为字符串
alert confirm document.write()
题目二:
console.log([]==false) //true
console.log(![]==false) //true
解析:
把类型不一样的 先转换为Number Number([])===0
==的比较先进行隐式转换,转换为相同类型的在进行比较
几种特例:
1 { }=={ } false //对象存储的是地址
2 [ ]==[ ] false //数组存储的是地址
3 NaN==NaN false
4 null==undefined true null==false false (null与undefined以外的所有值都不相等)
5 null === undefined false
6 字符串==对象 要先将对象转换为字符串 object =》[object Object]
将其他类型转换为布尔值
取反!运算 :
!转换为布尔值之后取反
![ ]=0
!!先转换为布尔类型在进行比较
Boolean([value])
隐式转换
在循环或者是判断条件中 条件处理的结果就是布尔值
只有 ‘0,NaN ,null ,undefined,空字符串 ’转换为布尔类型时为false,其他都为true
题目三:
var a=?可以使
if(a==1&&a==2&&a==3){
console.log(1);
console.log(a);
}
解析:
var a={
i:0,
toString(){
return ++this.i
}
}
或者
var i=0
Object.defineProperty(window,'a',{
get(){
return ++i
}
})
题目四:
let arr=[10.18,0,10,25,23]
arr=arr.map(parseInt)
console.log(arr)
[10,NaN,2,2,11 ]
解析:
arr.map((item,index)=>{
})
parseInt(10.18,0)=》parseInt('10.18',0)=>10
parseInt(0,1)=>n=1不在2-36之间输出NaN
parseInt(10,2)=》parseInt('10',2)=》把10看成二进制=》2
parseInt(25,3)=》parseInt('25',3)=》符合三进制的只有2=>23^0=2
parseInt(23,4)=》parseInt('23',4)=》符合四进制的有23,=》340+2*41=3+8=11
parseInt([value]):机制是先把value转换为字符串,然后在字符串左侧第一个数开始查找,把找到的所有有效数字字符串转换为数字,直到遇到一个非数字字符串为止
parseInt([value],[n])把n看做n进制的数据,最后都转换为十进制
n不写 默认n是10 特殊些情况 开头字符串是'0x'代表16进制
n的范围在[2-36]之间代表相应的多少进制(只有2到36进制)
n不在[2-36]之间的一律输出NaN
题目五:堆栈内存
let a={
n:1
}
let b=a
a.x=a={
n=2
}
console.log(a.x) undefined
console.log(b) =>
{
n:1,
x:{
n:2
}
}
ECstack执行环境栈
所有的变量赋值操作,都是先创建值,然后在创建变量,最后变量指针指向向值
运算符优先级:带成员访问的要优先处理a.x=a={n:2}先处理a.x=a