博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 复习之语法专题
阅读量:5886 次
发布时间:2019-06-19

本文共 3446 字,大约阅读时间需要 11 分钟。

一、数据类型的转化

强制转换

主要指使用Number(), String(), Boolean()三个函数。

  1. Number()
// 数值:转换后还是原来的值Number(324) // 324// 字符串:如果可以被解析为数值,则转换为相应的数值Number('324') // 324// 字符串:如果不可以被解析为数值,返回 NaNNumber('324abc') // NaN// 空字符串转为0Number('') // 0// 布尔值:true 转成 1,false 转成 0Number(true) // 1Number(false) // 0// undefined:转成 NaNNumber(undefined) // NaN// null:转成0Number(null) // 0// Number 方法如果是对象,除非包含单个数值的数组,否则都返回 NaNNumber({a: 1}) // NaNNumber([1, 2, 3]) // NaNNumber([5]) // 5复制代码

关于对象的 Number() 转换规则: 第一步,调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。

第二步,如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。

第三步,如果toString方法返回的是对象,就报错。

  1. String() 针对原始类型值
  • 数值:转为相应的字符串。

  • 字符串:转换后还是原来的值。

  • 布尔值:true转为字符串"true",false转为字符串"false"。

  • undefined:转为字符串"undefined"。

  • null:转为字符串"null"

针对对象 String方法的参数如果是对象,返回一个类型字符串;如果是数组,返回该数组的字符串形式。

String({a: 1}) // "[object Object]"String([1, 2, 3]) // "1,2,3"复制代码

针对对象,String()方法转换规则: 第一步、先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。

第二步、如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不再进行以下步骤。

第三步、如果valueOf方法返回的是对象,就报错。

  1. Boolean() 它的转换规则相对简单:除了以下五个值的转换结果为false,其他的值全部为true
  • undefined
  • null
  • -0+0
  • ''空字符串
  • NaN

注意,所有对象,包括空对象转换的结果都是true

Boolean({}) // trueBoolean([]) // trueBoolean(new Boolean(false)) // true复制代码

二、错误处理机制

JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。Error实例对象必须有message属性。

  • message:错误提示信息

  • name:错误名称(非标准属性)

  • stack:错误的堆栈(非标准属性)

let err = new Error('出错了');err.message // "出错了"复制代码

原生错误类型

Error实例对象是一般的错误类型,在他的基础上,JavaScript 还定义了 6 中错误对象。

  1. SyntaxError 对象(解析代码时发生的语法错误)
  2. ReferenceError 对象(引用一个不存在的变量时发生的错误)
  3. RangeError 对象(一个值超出有效范围时发生的错误,主要有几种情况,一是数组长度为负数,二是Number对象的方法参数超出范围,以及函数堆栈超过最大值)
  4. TypeError 对象(变量或参数不是与其类型时发生的错误)
  5. URIError 对象(URI 相关函数的参数不正确时抛出的错误)
  6. EvalError 对象(eval函数没有被正确执行时抛出错误)

自定义错误

function UserError(message) {  this.message = message || '默认信息';  this.name = 'UserError';}UserError.prototype = new Error();UserError.prototype.constructor = UserError;new UserError('这是自定义的错误!');复制代码

throw 语句

throw语句的作用是手动中断程序执行,抛出一个错误。

tyr...catch 结构

一旦发生错误,程序就中止执行了。JavaScript 提供了try...catch结构,允许对错误进行处理,选择是否往下执行。

try {  throw new Error('出错了!');} catch (e) {  console.log(e.name + ": " + e.message);  console.log(e.stack);}// Error: 出错了!//   at 
:3:9// ...复制代码

上面代码中,try代码块抛出错误(上例用的是throw语句),JavaScript 引擎就立即把代码的执行,转到catch代码块,或者说错误被catch代码块捕获了。catch接受一个参数,表示try代码块抛出的值。catch代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。

finally代码块

try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。

注意:遇到只有tryfinally语句的情况。在try代码块中如果出现return语句,或者throw语句。其执行顺序是排在finally代码之前,但是它要等到finally代码执行完毕后才返回。

function idle(x) {  try {    console.log(x);    return 'result';  } finally {    console.log('FINALLY');  }}idle('hello')// hello// FINALLY复制代码

遇到存在trycatchfinally语句的情况,进入catch代码块之后,一遇到throw语句,就会去执行finally代码块,其中有return false语句,因此就直接返回了,不再会回去执行catch代码块剩下的部分了。

function f() {  try {    throw '出错了!';  } catch(e) {    console.log('捕捉到内部错误');    throw e; // 这句原本会等到finally结束再执行  } finally {    return false; // 直接返回  }}try {  f();} catch(e) {  // 此处不会执行  console.log('caught outer "bogus"');}//  捕捉到内部错误复制代码

三、编程风格

这里就不做介绍了

四、console对象与控制台

console 对象的静态方法

  1. console.log()平时用的比较多,用于在控制台输出信息
  2. console.info()console.log()的别名,用法完全一样
  3. console.debug()console.log方法类似,会在控制台输出调试信息。但是,默认情况下,console.debug输出的信息不会显示,只有在打开显示级别在verbose的情况下,才会显示。
  4. console.warn()log不同之处在于,输出信息时,前面将一个黄色三角,表示警告。
  5. console.error()输出信息时,会在前面上一个空色的叉,表示出错

还有其他一些,平时很少用到,这里不做表述

转载于:https://juejin.im/post/5c73b330e51d457f14364a11

你可能感兴趣的文章
xgboost原理及应用
查看>>
Spring--quartz中cronExpression配置说明
查看>>
照片批量压缩、缩放、加水印工具
查看>>
计蒜客:百度的科学计算器(简单)【python神解】
查看>>
阿里前端框架Alice是个不错的选择
查看>>
12.5. 集成 Mybatis
查看>>
如何去掉NavigationBar的backButton
查看>>
MySQL · 特性分析 · 数据一样checksum不一样
查看>>
《工业控制网络安全技术与实践》一2.3.1 可编程逻辑控制器
查看>>
用友优普携手秉钧网络打造完整闭环O2O方案
查看>>
展望网络安全未来 布局新兴信息技术
查看>>
《中国人工智能学会通讯》——11.71 在线多示例度量学习的结构化稀 疏表观模型...
查看>>
BetterFE 前端技术周刊 - 2019/02/25
查看>>
前端小知识10点(2019.5.2)
查看>>
1. 函数式编程
查看>>
web归纳
查看>>
云计算面试题笔试锦集,云计算实用面试题答案一
查看>>
javascript之__proto__ 和prototype
查看>>
10 个 Python 初学者必知编码小技巧
查看>>
LeetCode 700——二叉搜索树中的搜索
查看>>