【js常见面试题】

【js常见面试题】,第1张

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 一、js本地对象/内置对象/宿主对象
  • 二、js深拷贝和浅拷贝
    • 1.浅拷贝方法:
    • 2.深拷贝方法:
  • 二、常见继承方式
  • 三、如何进行代码优化
  • 四、前端优化
  • 五、js实现冒泡排序
  • 六、isNaN和Number.isNaN
  • 七、isFinite和Number.isFinite
  • 八、Array.prototype.flat/flagMap
  • 九、Object.is
  • 十、common.js循环加载
  • 十一、es6模块循环加载
  • 总结


一、js本地对象/内置对象/宿主对象
  • 本地对象指的是可以用new实例化的
  • 内置对象指的是Math、global这些
  • 宿主对象指的是浏览器自带的 document、window等
二、js深拷贝和浅拷贝 1.浅拷贝方法:
  1. Object.assign
  2. 解构赋值
2.深拷贝方法:
  1. JSON.stringify(xx)
    缺点:值为undefined的会被忽略;值为function的也会被忽略
  2. 递归实现
    var obj1 = [{
        name: '臧三',
        childs: ['小明', '小芳'],
        fn: function() {},
        age: undefined
    }]
    var obj2 = extend(obj1)
    obj2[0].childs = []
    console.log(obj1, obj2)
    
    function extend(data) {
    	if (typeof data === 'object' && data) {
    		var value = data.length ? [] : {}
    		for(let i in data) {
    			value[i] = extend(data[i])
    		}
    		return value
    	} else {
    		return data
    	}
    }
    

二、常见继承方式
  1. 扩展原型对象
  2. call/apply借用构造函数实现继承
  3. 组合继承:原型链继承方法+借用构造函数继承属性

三、如何进行代码优化
  1. 代码重用
  2. 函数单一职责原则
  3. 变量、闭包的内存释放
四、前端优化
  1. 减少http请求次数
  2. 减少 *** 作dom次数,避免回流与重绘,少用全局变量
  3. gzip压缩,cdn加速,文件服务器
五、js实现冒泡排序
function sort(arr) {
	for(let i = 0; i < arr.length; i++) {
		for(let j = 0; j < arr.length -i; j++) {
			let temp = arr[j]
			if (arr[j] > arr[j+1]) {
				arr[j] = arr[j+1]
				arr[j+1] = temp
			}
		}
	}
	
	return arr
}
六、isNaN和Number.isNaN
  1. Number.isNaN只有对于NaN才返回true,非NaN一律返回false。首先会判断传入的值是否是数字类型,如果不是,直接返回false,是判断一个值是否严格等于NaN
  2. isNaN: 通过Number将参数转为数字类型,如果转换成功,则返回false,反之返回true。它只是判断参数是否能转换为数字,不能判断是否严格等于NaN
七、isFinite和Number.isFinite
  1. Number.isFinite 先检测一个值是不是数值,如果不是,直接返回false. 如果是一个数值,再建查其是不是有效的
  2. isFinite 调用Number将值转换为数值类型,再检测
八、Array.prototype.flat/flagMap

flat: 数组拍平
flatMap:先map再flat

九、Object.is

相等运算符:自动转换数据类型
严格相等运算符:

NaN === NaN => false
+0 === -0 => true

Object.is 在所有环境中,只要两个值是一样的, 他们就应该相等

Object.is(+0, -0) => false
Object.is(NaN, NaN) => true
十、common.js循环加载

commonjs模块的重要特性是加载时执行,一旦某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出

十一、es6模块循环加载

es6模块动态引用,被import的变量不会被缓存,会成为一个指向被加载模块的一个引用,需要开发者自己保证,在取值的时候取到值

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/730900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存