1 运算符有什么作用?
- 用来完成基本的算术运算
2 加法运算符 有哪些规则?
1.用来求两个数值的和
2.如果运算子是对象,必须先转成原始类型的值,然后再相加。
3 JS引擎如何处理对象相加?
1.自动调用对象的valueOf方法。
2.调用对象的toString方法,将其转为字符串。
4 余数运算符对浮点数的运算有什么问题?
由于浮点数不是精确的值,无法得到完全准确的结果。
5 自增和自减运算符需要注意什么?
自增和自减运算符有一个需要注意的地方,就是放在变量之后,会先返回变量操作前的值,再进行自增/自减操作;放在变量之前,会先进行自增/自减操作,再返回变量操作后的值。
6 如何理解指数运算符是右结合,而不是左结合?
多个指数运算符连用时,先进行最右边的计算。
7 动态类型语言有什么特点?
在运行期间才去做数据类型检查,所以不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
8 强制转换有什么规则?
总是返回基本类型值(字符串、数字和布尔值),不会返回对象和函数。
9 什么情况下,JavaScript 会自动转换数据类型?
不同类型的数据互相运算;对非布尔值类型的数据求布尔值;对非数值类型的值使用一元运算符(即+和-)
注意:预期什么类型的值,就调用该类型的转换函数。自动转换具有不确定性,而且不易除错,建议在预期为布尔值、数值、字符串的地方,全部使用Boolean( )、Number( )和String( )函数进行显式转换
10 谈谈JavaScript 原生提供Error构造函数?
JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。
11 JavaScript 定义了哪些错误对象?
- SyntaxError对象是解析代码时发生的语法错误。
- ReferenceError对象是引用一个不存在的变量时发生的错误。
- RangeError对象是一个值超出有效范围时发生的错误。主要有几种情况,一是数组长度为负数,二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。
- TypeError对象是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。
- URIError对象是 URI 相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
- eval函数没有被正确执行时,会抛出EvalError错误。该错误类型已经不再使用了,只是为了保证与以前代码兼容,才继续保留。
12 如何定义自己的错误对象?
function UserError(message) {
this.message = message || '默认信息';
this.name = 'UserError';
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
13 throw语句的作用?
throw语句的作用是手动中断程序执行,抛出一个错误。
14 try...catch finally 的作用?
- try...catch结构,允许对错误进行处理,选择是否往下执行。
- try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。
15 什么是编程风格?
“编程风格”(programming style)指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。
16 使用分号的好处?
一个分号代表了一段代码的结束,习惯末尾加分号可以有效避免很多因为打包或者js机制造成的短句,然后生出特殊语句。
17 全局变量的缺点?
可能就是全局变量对于任何一个代码块,都是可读可写。这对代码的模块化和重复使用,非常不利。
因此,建议避免使用全局变量。如果不得不使用,可以考虑用大写字母表示变量名,这样更容易看出这是全局变量,比如UPPER_CASE。
18 相等和严格相等的区别?
比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。
19 如何提升代码可读性?
编码风格一致;避免重复代码;分离代码块;避免嵌套太深;一致的命名方案;恰到好处的注释,避免冗余的注释。
20 console 对象有哪些常用的方法?
- console.log方法用于在控制台输出信息。它可以接受一个或多个参数,将它们连接起来输出。
- console.info是console.log方法的别名,用法完全一样。只不过console.info方法会在输出信息的前面,加上一个蓝色图标。
- console.debug方法与console.log方法类似,会在控制台输出调试信息。但是,默认情况下,console.debug输出的信息不会显示,只有在打开显示级别在verbose的情况下,才会显示。
- warn方法和error方法也是在控制台输出信息,它们与log方法的不同之处在于,warn方法输出信息时,在最前面加一个黄色三角,表示警告;error方法输出信息时,在最前面加一个红色的叉,表示出错。
- warn方法和error方法也是在控制台输出信息,它们与log方法的不同之处在于,warn方法输出信息时,在最前面加一个黄色三角,表示警告;error方法输出信息时,在最前面加一个红色的叉,表示出错。
- count方法用于计数,输出它被调用了多少次。
- dir方法用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。
- dirxml方法主要用于以目录树的形式,显示 DOM 节点。
- console.assert方法主要用于程序运行过程中,进行条件判断,如果不满足条件,就显示一个错误,但不会中断程序执行。这样就相当于提示用户,内部状态不正确。
- time方法表示计时开始,timeEnd方法表示计时结束。它们的参数是计时器的名称。调用timeEnd方法之后,控制台会显示“计时器名称: 所耗费的时间”。
- console.group和console.groupEnd这两个方法用于将显示的信息分组。它只在输出大量信息时有用,分在一组的信息,可以用鼠标折叠/展开。
- console.trace方法显示当前执行的代码在堆栈中的调用路径。
- console.clear方法用于清除当前控制台的所有输出,将光标回置到第一行。如果用户选中了控制台的“Preserve log”选项,console.clear方法将不起作用。