文章目录
堆栈内存
所谓堆栈内存,其实就是在计算机内存中分配出来一块空间,用于执行和存储代码。
堆内存作用:存储引用数据类型
栈内存作用:1、执行代码 2、存储基本数据类型
阿里面试题(关于栈堆内存问题)
let a={
n:1,
}
let b=a;
a.x=a={
n:2
}
console.log(a.x);
console.log(b)
各数据类型转换(汇总)
对象转化为数字或字符串
当对象转化为数字时:
首先检测对象的Symbol.toPrimitive这个属性,获取原始值,
如果没有,则继续调用他的valueOf(),继续获取原始值
如果值不是原始值,则继续调用toString转换为字符串
再把字符串基于Number()转换为数字
各类型转换为数字
isNaN、Number、parseInt、parseFloat
在进行加减乘除数学运算时(加号两边有字符串时除外)
==比较
ture ->1 false ->0
‘’ ->0 ‘12’ ->12 ‘珠峰’ ->NaN
null ->0
undefined ->NaN
{} /^$/ function(){} ->NaN
[] ->’’ ->0
[12] ->‘12’ ->12
[12,23] ->‘12,23’ ->NaN
//引用数据类型转换为数字
//通过toString方法把数组转化为字符串,然后在调用Number
运算
1-‘1’ ->0
10/undefined ->NaN
10null ->0
10[10] ->100
toString转换为字符串
null和undefined有转换为字符串的方法,只是浏览器不让看;
对象转化为字符串比较特殊,不管内容是什么,结果都是[object Object]
把其他数据类型转换为布尔类型
只有0、NaN、空字符串、null、undefined五个转换为false,其余都转为true
使用进行比较时
如果两边类型不一致,则转换为相同的数据类型
NaNNaN => false ;NaN和任何值比较都不相等
null == undefined ⇒true;
null=undefined ⇒false
null&undefined和其他任何值比较都是不相等
其余情况大部分是转换为数字比较
对象与对象:比较的是空间地址,不同空间,结果为false
对象和数字:对象转为数字
[] == 0 ->true
({}) == NaN ->false NaN和自己都不相等
对象和字符串:都转化为字符串
[] == ‘’ ->true
[10] == ‘10’=>true
对象和布尔:都转化为数字
[] = = true -> 0 == 1 ->false
[] = = false -> 0 == 0 ->true
![] = = false -> false = =false ->true;!为取反操作,返回值是布尔类型,不需要再进行数据类型转换
>// 习题
// var a = ?;
// if(a==1 & a==2 & a==3) {
// console.log('ok');
// }
>// 答案1
var a ={
i:0
};
a[Symbol.toPrimitive] = function () {
return ++this.i;
}
if(a==1 & a