- 原始值的种类?
- Undefined、Null、Boolean、String、Number、Symbol、BigInt
- 原始值与引用值的区别?
- js中按值访问与按引用访问的区别?
- 保存原始值的变量是按值(by value)访问的,因为我们操作的就是存储在变量中的实际值。
- 在操作对象时,实际上操作的是对该对象的引用(reference)而非实际的对象本身。
- 参考
- 描述js中复制值的操作?
- 对于原始值:原始值会被复制到新的栈空间上,新旧变量之间是相互独立的。
- 对于引用值:复制的只是一个指针,指向存储在堆内存上的对象。新旧变量实际上指向同一个对象。
- js中如何传递参数?
- ES中所有的函数的参数都是按值传递的。这意味着函数外的值会被复制到函数内部的参数中,就像从一个变量复制到另一个变量一样。
- 如果是原始值,那么就跟原始值变量复制一样
- 如果是引用值,那么就和引用值变量的赋值一样
- 在按值传递参数中,值会被复制到一个局部变量(即一个命名参数,或者用ECMAScript的话说就是arguments对象中的一个槽位)
- 在按引用传递参数时,值在内存中的位置会被保存在一个局部变量。这意味着对本地变量的修改会反映到函数外部。(这在ECMAScript中是不可能的。)
- 对象是按值传递的。
- ECMAScript中函数的参数就是局部变量。
- 参考
- js中确定类型的方式?
- typeof操作符,null被判断成object类型,function被判断成function类型;
- instanceof操作符,
'123' instanceof String
, // true or false - 博客园参考-类型判断参考
- 简书参考-类型判断参考
- 理解js中的执行上下文?
-
1.执行上下文是什么?
- 执行上下文(Execution Context): 函数执行前进行的准备工作(也称执行上下文环境)
-
2.变量或函数的上下文决定了它们可以访问哪些数据以及它们的行为。每个上下文都有一个关联的变量对象(variable object),而这个上下文中定义的所有变量和函数都存在于这个歌对象上。
-
3.执行上下文参考
-
- 理解作用域和作用域链scope chain?
-
上下文中的代码在执行的时候,会创建变量对象的一个作用域链(scope chain)。这个作用域链决定了各级上下文中的代码在访问变量和函数时的顺序。
-
代码执行时的标识符解析是通过沿作用域链逐级搜索标识符名称完成的。搜索过程始终从作用域链的最前端开始,然后逐级往后,直到找到标识符。(如果没有找到标识符,那么通常会报错。)
-
什么是作用域?
- 作用域,它是指对某一变量和方法具有访问权限的代码空间。当我们在定义变量的时候,会定义两种变量,一种是在全局环境下定义的变量,叫全局变量,一种是在函数中定义的变量叫局部变量。全局变量的作用域就是全局环境,局部变量的作用域就是函数。
-
活动对象(activation object)是什么?
-
理解函数的arguments对象?
-
- 什么是作用域链增强?
- 执行上下文只有全局上下文、函数上下文(eval()调用内部存在第三种上下文),但有其他方式来增强作用域链(某些语句会导致在作用域链前端临时添加一个上下文,这个上下文在代码执行后会被删除):
- 对with语句来说,会向作用域链前端添加指定的对象;
- 对catch语句而言,则会创建一个新的变量对象,这个变量对象会包含要抛出的错误对象的声明。
- 而在with语句中使用var声明的变量url会成为函数上下文的一部分,可以作为函数的值被返回;但像这里使用let声明的变量url,因为被限制在块级作用域(稍后介绍),所以在with块之外没有定义。
- with的参考
- 执行上下文只有全局上下文、函数上下文(eval()调用内部存在第三种上下文),但有其他方式来增强作用域链(某些语句会导致在作用域链前端临时添加一个上下文,这个上下文在代码执行后会被删除):
- 变量声明与作用域的关系?
- 对于var,var声明的变量会自动添加到最接近的上下文。在函数中最接近的上下文就是函数的局部上下文。在with语句中最接近的上下文也是函数上下文。若变量没有声明也自动被添加到全局上下文。
- 对于let,它的作用域是块级作用域。if块、while块、function块,甚至连单独的块也是let声明变量的作用域。
- 理解暂时性死区?
- 对于const,除了let,ES6同时还增加了const关键字。使用const声明的变量必须同时初始化为某个值。
- 知道标识查找吗?
- 执行上下文中的概念。
- 参考
- 原型链与作用域链?
- 作用域链:针对的是变量。如果局部作用域查不到,会到上级作用域查,直到全局作用域。
- 注意:作用域链中的对象也有一个原型链,因此搜索可能涉及每个对象的原型链。
- 原型链,原型链是针对构造函数的,比如我先创建了一个函数,然后通过一个变量new了这个函数,那么这个被new出来的函数就会继承创建出来的那个函数的属性,然后如果我访问new出来的这个函数的某个属性,但是我并没有在这个new出来的函数中定义这个变量,那么它就会往上(向创建出它的函数中)查找,这个查找的过程就叫做原型链。
- 参考
- js中垃圾回收方式?
- 标记清理
- 引用计数
- 这两者之间的区别?
- 参考
- js中优化内存占用的手段?
- 保证在执行代码时只保存必要的数据。如数据不再必要,那么把它们设置为null,释放其引用,这是解除引用。这个建议最适合全局变量和全局对象的属性。
- 1.通过const和let声明提升性能。
- 2.隐藏类和删除操作
- 3.避免造成内存泄漏
- 4.静态分配与对象池(最后的手段了,压榨浏览器)
- javascrip内存优化
- toString()、toLocaleString()、valueOf()之间的区别?
- 上述三个方法在Date类型中的返回值有何区别?
- Date类型重写了上述三个方法
- toLocaleString()返回与浏览器运行的本地环境一致的日期和时间
- toString()返回带有时区信息的日期和时间,时间通常用0~23表示
- valueOf()返回的是日期的毫秒数,也就是说Date类型之间可以进行一些数学操作,注意+操作符返回的是带有时区信息的字符串拼接
- 日期格式化方法与组件
- P106
- 正则表达式中表示匹配模式的标记?
- g:全局模式
- i:不区分大小写
- m:多行模式
- y:粘附模式
- u:Unicode模式
- s:dotAll模式
- RegExp实例属性有哪些?
- 应该不会问这么详细的!!!
- RegExp实例方法?exec()与构造函数属性?
- 记不住!!!
- 原始值包装类型
- Boolean
- Number
- String
- 【问】为什么要提供原始包装类?
- 为了方便操作原始值。
- 每当用到某个原始值的方法或属性时,后台都会创建一个相应原始包装类型的对象,从而暴露出操作原始值的各种方法。
- 在原始值包装类型的实例上调用typeof会返回"object",所有原始值包装对象都会转换为布尔值true。调用instanceof Object;返回true;instanceof String也返回true
- Object构造函数作为一个工厂方法,能够根据传入值的类型返回相应原始值包装类型的实例.
let obj = new Object('some text'); obj instanceof String; // true
- 原始包装类型与转型函数的区别?
- 例如new String() 与String()的区别?
- 理解原始布尔值与Boolean对象之间的区别
let falseObject = new Boolean(false);
let result = falseObject && true;
console.log(result); // true
let falseValue = false;
result = falseValue && true;
console.log(result); // false
console.log(typeof falseObject); // object
console.log(typeof falseValue); // boolean
console.log(falseObject instanceof Boolean); // true
console.log(falseValue instanceof Boolean); // false
- Number对象中的一些实例函数用法?
-
valueOf():返回Number对象表示的原始数值
-
toString():参数2,8,10,16,返回几进制数的字符串
-
toLocaleString():返回字符串
-
toFixed():返回包含指定小数点位数的数值字符串
-
toExponential():返回以科学记数法,字符串
-
toPrecision():方法会根据情况返回最合理的输出结果,可能是固定长度,也可能是科学记数法形式。这个方法接收一个参数,表示结果中数字的总位数(不包含指数)
-
Number.isInteger()方法,用于辨别一个数值是否保存为整数
-
Number的其他属性
-
- String对象的一些方法、实例方法和属性
- valueOf()、toLocaleString()和toString()都返回对象的原始字符串值
- length属性
- charCodeAt()
- charAt()
- concat()
- +操作符
- slice()
- substr()
- substring()
- indexOf()
- lastIndexOf()
- startsWith()
- endsWith()
- includes()
- trim()
- repeat()
- padStart()、padEnd()
- 迭代与解构
- -等等
-
内置对象
-
Object、Array、String、Global、Math等
-
理解Global对象吗?
- Global对象是ECMAScript中最特别的对象,因为代码不会显式地访问它;
- 事实上不存在全局变量或全局函数。在全局作用域中定义的变量和函数都会变成Global对象的属性。
-
知道window对象吗?二者的区别与联系?
- 但浏览器将window对象实现为Global对象的代理。因此,所有全局作用域中声明的变量和函数都变成了window的属性
-
Global对象的属性?
-
-
内存泄漏的概念 垃圾回收与内存泄漏
- https://blog.csdn.net/qq_17550381/article/details/81126809
-
引用技术循环引用的解决方案(我之前被问过一次):赋值为null来清除引用。
-
Math类型