let a ={
n:1}// 声明变量 a,开辟堆内存AAAFFFF0000 存储键值对 n: 1,将内存地址赋值给 a,将变量 a 与 堆内存关联let b = a // AAAFFFF0000// a.x = b 这种写法会造成堆的无限嵌套,引发内存溢出 // 声明变量 b,与 堆内存关联
a.x = a ={
n:2}// (1) 拆分为 a.x = { n: 2 } 、 a = { n: 2 }// (2) 此时 a.x 的 a 仍然关联旧的堆内存地址 AAAFFFF0000// (3) 实际是给 AAAFFFF0000中添加了属性 x,并且赋值 { n: 2 }// (4) a = { n: 2 } 开辟了新的堆内存并且创建了新的关联 AAAFFFF0001
console.log(a.x)// a.x undefined
console.log(b)// AAAFFFF0000 { n: 1, x: { n: 2 } }
融会贯通
let n =[10,20]let m = n
let x = m
m[0]=100
x =[30,40]
x[0]=200
m = x
m [1]=300
n[2]=400
console.log(n, m, x)// [100, 20, 400]// [200, 300]// [200, 300]
2.冒泡排序
const arr =[2,5,8,6,4,1]for(let i =0; i < arr.length -1; i++){for(let j = i +1; j < arr.length; j++){if(arr[j]< arr[i]){[arr[j], arr[i]]=[arr[i], arr[j]]}}}
console.log(arr)
优化
const arr =[2,5,8,6,4,1]let len = arr.length
while(len--){for(let i =0; i < len; i++){if(arr[i +1]< arr[i]){[arr[i +1], arr[i]]=[arr[i], arr[i +1]]}}}
console.log(arr)
3.输出下列结果
var a ='abc'+123+456// 'abc123456'var b ='456'-'123'// 333var c =100+true+21.2+null+undefined+"Tencent"+[]+null+9+false// 'NaNTencentnull9false'
console.log(a, b, c)
举一反三
// alert的结果是?var str ='abc123'var num =parseInt(str)if(num ==NaN){alert(NaN)}elseif(num ==123){alert(123)}elseif(typeof num =='number'){alert('number')}else{alert('str')}// alert('number')// 输出结果var a =0var b = a
b++alert(a)// 0var o ={}
o.a =0var b = o
b.a =10alert(o.a)// 10/// 输出对应结果parseInt('')// NaNNumber('')// 0isNaN('')// falseparseInt(null)// NaNNumber(null)// 0isNaN(nul)// ReferenceError nul is undefinedparseInt('12px')// 12Number('12px')// NaNisNaN('12px')// true// 输出以下结果let x =[1,2,3]let y = x
let z =[4,5,6]
y[0]=10
y = z
z[1]=20
x[2]= z =30
console.log(x, y, z)// [10, 2, 30], [4, 20, 6], 30
考察for循环掌握
for(var i =0; i <10; i++){
console.log(i)// 0break}
console.log(i)// 0/* ==================== 循环7次,最终 i = 5 ==================== */for(var i =1; i <=10; i +=2){if(i <=5){
i++;continue;}else{
i -=2break}
i--
console.log(i)}
console.log(i)// 5/* ==================== 死循环,没有结果 ==================== */for(var i =3; i <12; i++){if(i <3){
i++break}if(i >9){
i +=2;continue}
i--}
console.log(i)//
i++和++i的区别
let a ='10'
a ==10? a++: a--
console.log(a)// 11let b ='10'switch(b){case10:
b++;break;default:
b--;}
console.log(b)// 9/* ==================== 输出计算结果 ==================== */let i =3// 5 + 4 + 4 + 3 - 2 + 4 + 4 - 2
console.log(5+(++i)+(i++)+3-2+(--i)+(i--)-2)// 20
console.log(i)// 3