JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)

时间:2024-01-09 16:40:20

1.装箱和拆箱:

装箱:把基本数据类型转化为对应的引用数据类型的操作;
var num = 123 // num
var objNum = new Num(123) // object
console.log(typeof objNum) // null
拆箱:将引用类型对象转换为对应的值类型数据对象;
valueOf()
var objNum = new Number(132)
console.log(typeod objNum.valueOf()) // 123 number
js toPrimitive(input, type)  input:传入的值  type:值类型
1.input 判断是不是原始类型的值 :是 直接返回
2.不是 : input.valueOf() 是: 原始类型 ->直接返回
3.还不是:input.toString():string 是 原始类型 返回
4.报错
面试题:
console.log([] + []) // '' + toPrimitive()
console.log([].valueOf()) // []
console.log([].toString()) // ''
[] + [] = '' + '' = '' console.log([] + {}) // [Object Object] 或 0
console.log([]) // ''
console.log({}.valueOf()) // {}
console.log({}.toString()) // [Object Object]

2.栈和堆:

什么是栈:计算机为原始类型开辟的一块内存空间string number ...
什么是堆:计算机为引用类型开辟的一块内存空间 object
var a = 'Mooc'
var b = a
b = 'Mooc2'
console.log(a, b) // Mooc Mooc2 var c = {key: 1}
var d = c
d.key = 2
console.log(c, d) // 2 2 // ['Mooc', 'Mooc2']
// c d ['x00000018', 'x000018'] -> { {key:2} }
// c d x00000018 -> {key:2} {key:2}
3.js中sort()方法
var arr = [1, 2, 3, 4, 5]; // 1, 2, 3, 4, 5
console.log(arr.sort()) //1, 2, 3, 4, 5
var arr2 = [3. 25, 15, 18, 9, 22];
console.log(arr2.sort()) // 15, 18, 22, 25, 3, 9
js中sort:
1.默认升序
2.将排序的元素转为字符串['3', '22'...];找对应字符串的Unicode码表
默认0-9-----先排第一位,排完第一位之后在排第二位
// 15, 18, 22, 25, 3, 9
var arr3 = [3. 25, 15, a, 18, 9, 22];
console.log(arr3.sort()) // [15, 18, 22, 25, 3, 9, 'a']
解决:
1.定义一个比较器函数
//送人头(callback)
function(x,y){
return x-y
} // 小于0->x移到y前面 大于0->x移到y后面 等于0-> 不变
var arr4 = [3. 25, 15, 18, 9, 22];
arr4.sort(function(x,y){
return x-y
})//默认升序 arr4 [3, 9, 15, 18, 22, 25]
arr4.sort(function(x,y){
return y-x
})//降序 arr4 [25, 22, 18, 15, 9, 3]
3.js中Date对象中的getMounth() 需要注意的:
var now = new Date()
console.log(now.getTime()) // 1608908483092 :1970 1 1 0 至今的一个毫秒数
console.log(now.getDay()) // 5 本周的第几天 周一到周日 7天
console.log(now.getDate()) // 25 号 本月的几号
console.log(now.getMounth() + 1)// 11 0-11(需要加1)
js 设计 仿照 java1.1 getMounth() 0-11=> 1-12 20多年js(java修改了但是js没修改过来)
4.开发中编码和解码使用场景有哪些
var url = 'https://www.baidu.com?key=hello&name=张三&num=123'
// escape() unescape()
console.log(escape(url)) // 除了ASCII(a-z, 0-9) . //https%3A//www.baidu.com%3Fkey%3Dhello%26name%3D%u5F20%u4E09%26num%3D123
var es = escape(url)
console.log(unescape(es)) // ASCII // https://www.baidu.com?key=hello&name=张三&num=123 //encodeURI() decodeURL()
console.log(encodeURI(url)) // https://www.baidu.com?key=hello&name=%E5%BC%A0%E4%B8%89&num=123
var ec = encodeURI(url)
console.log(decodeURI(ec)) // https://www.baidu.com?key=hello&name=张三&num=123 //encodeURIComponent() decodeURIComponent()