0
点赞
收藏
分享

微信扫一扫

JavaScript基础问题

cwq聖泉寒江2020 2022-04-30 阅读 100

文章目录


Javascript对象的底层数据结构是什么?

其他问法:
Javascript中的变量在内存中的具体存储形式?
理解值类型和引用类型?


Symbol理解?

声明一个唯一值

s instanceof Symbol   // false
Symbol.for('name')    // Symbol(name)
Symbol.keyFor(Symbol.for('name'))   // name
给对象当做一个字段使用:Obj[Symbol(‘’)]
// 找不到symbol
Object.keys(obj)  
For in
Obj.getOwnPropertyNames(obj)

基本类型对应的内置对象之间的装箱拆箱操作?

// 隐式装箱
let a = 'sum'
let b = a.indexof('s') // 0

// 进行隐式装箱
let a = new String('sum')  // 创建string类型的一个实例
let b = a.indexof('s') // 在实例上调用指定的方法
a = null  // 销毁这个实例

// 显式装箱:
let a = new String('sum')  // 直接用new 声明字符串

// 拆箱:
let [name, age] = [new String('sum'), new Number(24)]
console.log(typeof name, typeof age)  // object, object

// 拆箱操作 - 使用valueOf 或toString
console.log(typeof name.valueOf(), typeof age.valueOf())  // string, number

null和undefined的区别?

null表示空 undefined表示未定义
相等==, 不全等===
typeof结果不一样 [object, undefined]
+null +undefined结果不一样 [0, NaN]


判断javascript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型?

typeof x  				  	// x = new String(‘1’)得出结果为object
x instanceof Array              // 无法区分对象和数组
Object.prototype.toString.call(x)  // 目前最好的判断形式
x.constructor                 // null undefined 没法使用
变量的内置属性方法:数组的length属性  // 字符串也有length属性

可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用?

+null  // 0  
+'' // 0     
+'432'  // 432
'1' == 1  // '1' == '1'  且使用==会触发toString valueOf可以return新值回去

出现小数精度丢失的原因,javascript可以存储的最大数字,最大安全数字,处理大数字的方法,避免精度丢失的方法?

小数进行算术运算时,实质上就是把十进制的浮点数转化为二进制
JS存储最大值:Number.Max_VALUE()
JS最大安全值:Number.Max_SAFE_INTERGER(),即2的53次方
避免精度丢失方法:toFixed()方法,先进行四舍五入取有效的小数位数,然后使用parseFloat()返回浮点数


理解原型设计模式以及javascript中的原型规则


理解javascript的作用域和作用域链


理解javascript的执行上下文栈


this的原理以及几种不同的使用场景的取值

this的值是在执行上下文的时候才能被确认


instanceof的底层实现原理,手动实现一个instanceof

function myInstanceof(obj, constructor) {
    let implicitPrototype = obj?.__proto__;  // obj的隐式原型
    const displayPrototype = constructor.prototype;  // 构造函数的原型
    while (implicitPrototype) {  // 遍历原型链
        // 找到,返回true
        if (implicitPrototype === displayPrototype) return true;
        implicitPrototype = implicitPrototype.__proto__;
    }
    return false; // 遍历结束还没找到,返回false
}

描述new 一个对象的详细过程,手动实现一个new操作符

创建一个空对象
将函数内部的属性指向这个对象
将this指向这个对象
返回对象

function mynew(construtor, ...argus) {
	var obj = Object.create(construtor.prototype)
	var reslut = construtor.apply(obj, argus)
	return reslut 
}

闭包的实现原理和作用,可以列举几个开发中闭包的实际应用

概念:函数里面声明变量且再返回一个函数(可以访问变量的函数)
优点:变量私有化,避免全局污染
缺点:没有被销毁的变量会保留在内存,大量使用闭包造成内存泄漏,内存消耗过大


理解堆栈溢出和内存泄漏的原理,如何防止

function isEven(num ) {
  if (num == 0) return true
 	  if (num == 1) return false
  return isEven(Math.abs(num) - 2)
}

理解模块化解决实际问问题,列举几个模块化方案并理解其中原理

创建对象的方法有哪些

阐述js异步原理 eventLoop?Js事件流?如何处理循环的异步操作?

es6新增了哪些方法,如何处理这些方法的兼容问题

H5有哪些新特性

localstorage、sessionStorage、cookie

如何跳出for循环

ajax请求流程

深浅copy

this指向及如何改变

js的变量提升

事件委托

Promise的实现原理

理解词法作用域和动态作用域

理解es6 class构造以及集成的底层实现原理

举报

相关推荐

0 条评论