第三次:运算符和语法专题

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 定义了哪些错误对象?
  1. SyntaxError对象是解析代码时发生的语法错误。
  2. ReferenceError对象是引用一个不存在的变量时发生的错误。
  3. RangeError对象是一个值超出有效范围时发生的错误。主要有几种情况,一是数组长度为负数,二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。
  4. TypeError对象是变量或参数不是预期类型时发生的错误。比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。
  5. URIError对象是 URI 相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
  6. 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 的作用?
  1. try...catch结构,允许对错误进行处理,选择是否往下执行。
  2. try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。
15 什么是编程风格?

“编程风格”(programming style)指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。

16 使用分号的好处?

一个分号代表了一段代码的结束,习惯末尾加分号可以有效避免很多因为打包或者js机制造成的短句,然后生出特殊语句。

17 全局变量的缺点?

可能就是全局变量对于任何一个代码块,都是可读可写。这对代码的模块化和重复使用,非常不利。
因此,建议避免使用全局变量。如果不得不使用,可以考虑用大写字母表示变量名,这样更容易看出这是全局变量,比如UPPER_CASE。

18 相等和严格相等的区别?

比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。

19 如何提升代码可读性?

编码风格一致;避免重复代码;分离代码块;避免嵌套太深;一致的命名方案;恰到好处的注释,避免冗余的注释。

20 console 对象有哪些常用的方法?
  1. console.log方法用于在控制台输出信息。它可以接受一个或多个参数,将它们连接起来输出。
  2. console.info是console.log方法的别名,用法完全一样。只不过console.info方法会在输出信息的前面,加上一个蓝色图标。
  3. console.debug方法与console.log方法类似,会在控制台输出调试信息。但是,默认情况下,console.debug输出的信息不会显示,只有在打开显示级别在verbose的情况下,才会显示。
  4. warn方法和error方法也是在控制台输出信息,它们与log方法的不同之处在于,warn方法输出信息时,在最前面加一个黄色三角,表示警告;error方法输出信息时,在最前面加一个红色的叉,表示出错。
  5. warn方法和error方法也是在控制台输出信息,它们与log方法的不同之处在于,warn方法输出信息时,在最前面加一个黄色三角,表示警告;error方法输出信息时,在最前面加一个红色的叉,表示出错。
  6. count方法用于计数,输出它被调用了多少次。
  7. dir方法用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。
  8. dirxml方法主要用于以目录树的形式,显示 DOM 节点。
  9. console.assert方法主要用于程序运行过程中,进行条件判断,如果不满足条件,就显示一个错误,但不会中断程序执行。这样就相当于提示用户,内部状态不正确。
  10. time方法表示计时开始,timeEnd方法表示计时结束。它们的参数是计时器的名称。调用timeEnd方法之后,控制台会显示“计时器名称: 所耗费的时间”。
  11. console.group和console.groupEnd这两个方法用于将显示的信息分组。它只在输出大量信息时有用,分在一组的信息,可以用鼠标折叠/展开。
  12. console.trace方法显示当前执行的代码在堆栈中的调用路径。
  13. console.clear方法用于清除当前控制台的所有输出,将光标回置到第一行。如果用户选中了控制台的“Preserve log”选项,console.clear方法将不起作用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容