美文网首页
04ES5--常用语法

04ES5--常用语法

作者: 修_远 | 来源:发表于2020-11-05 13:39 被阅读0次

数据类型的转换

类型转换在开发中是非常常见的一种操作,特别是对于js这种动态类型预言,变量没有类型限制,编译时是无法百分百通过静态分析出一个变量的类型,有些数据类型只有在运行是才能。

强制转换

1、 Number():将值转成数字

  1. 空字符串转为0;
  2. null 这种转为 0
  3. 123abc 这种转为 NaN
  4. undefined 这种转为 NaN
  5. 相较于 parseIntNumber 会更加严格,只要有一个字符串不是数字,整个字符串都会被转成 NaN,而 parseInt 会根据规则转换一部分可以转换的
  6. 对于对象,除了包含单个数值的数组,其他对象一律转换为 NaN。对象的转换步骤如下:
    1. 调用对象自身的 valueOf 方法。如果返回原始类型的值,则直接对该值使用 Number 函数,不再进行后续步骤。
    2. 如果 valueOf 方法返回的还是对象,则改为调用对象自身的 toString 方法。如果 toString 方法返回原始类型的值,则对该值使用Number 函数,不再进行后续步骤。
    3. 如果 toString 方法返回的是对象,就报错

2、 String():将值转成字符串

  1. 数值转成相应的字符串
  2. 字符串还是原来的字符串
  3. 布尔值:true => "true"false => "false"
  4. 特殊值:undefined => "undefined"null => "null"
  5. 对象:与 Number 方法基本相同,只是互换了 valueOf 方法和 toString 方法的执行顺序
    1. 先调用对象自身的 toString 方法。如果返回原始类型的值,则对该值使用 String 函数,不再进行以下步骤。
    2. 如果 toString 方法返回的是对象,再调用原对象的 valueOf 方法。如果 valueOf 方法返回原始类型的值,则对该值使用 String函数,不再进行以下步骤。
    3. 如果 valueOf 方法返回的是对象,就报错。

3、Boolean():将值转为布尔值

除了以下的五个值转化为 false,其他的全部是 true

  1. undefined
  2. null
  3. 0
  4. NaN
  5. ''(空字符串)

4、自动转换

这里的自动转换都是以强制转换为基础,只是不需要手动去强转,js会帮你完成转换。

  1. String() 不同类型的数据运算。123 + 'abc',自动转为字符串 123abc
  2. Boolean() 对非布尔值进行布尔求值。if ('abc'),自动转为 true
  3. Number() 非数值类型使用数值运算符。+ {foo:'bar'} 、- [1,2,3],自动转为 NaN

其他的一些类型的转换都是比较常见的转换,没什么特别之处,这里就不做记录了。

错误处理机制

程序员写出来的程序都是有bug,如何记录、分析这些bug呢,程序员建立了错误处理机制,在不同的语言上有不同的实现,但都大同小异,js中的错误对象是:ErrorError有以下几个属性:

  • message:错误提示信息、错误描述
  • name:错误名称(非标准属性)
  • stack:错误堆栈(非标准信息)

但在实际开发中,程序员总会遇到各种各样的错误,一种错误类型往往满足不了这些描述,所以又派生出以下六种错误对象:

  • SyntaxError:语法错误,解析代码时发生。编译时错误;
  • ReferenceError:引用一个不存在的变量时发生的错误。运行时错误;
  • RangeError:数组越界、Number方法超出范围、函数堆栈超过最大值。运行时错误;
  • TypeError:对象是变量后参数不是预期类型时发生的错误。运行时错误;
  • URIError:对象是 URI 相关函数的参数不正确时抛出的错误;
  • EvalError:eval 函数没有被正确执行时,抛出的错误。该错误类型已废弃。

如果连上面的几种错误都满足不了你,你可以自定义错误:

// 定义
function UserError(message) {
  this.message = message || '默认信息';
  this.name = 'UserError';
}

UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
// 使用
new UserError('这是自定义的错误!');

在使用错误对象时,都会用到 throwtry...catch...finally,这个都是比较常规的用法,这里就不展开介绍了。看两个例子就行了

if (x <= 0) {
  throw new Error('x 必须为正数');
}
// Uncaught ReferenceError: x is not defined
function cleansUp() {
  try {
    throw new Error('出错了……');
    console.log('此行不会执行');
  } finally {
    console.log('完成清理工作');
  }
}

编程风格

与其说是编程风格,不如上升点,说成是编程规范,譬如我们常挂在嘴边的谷歌编程规范,规范都是约定俗成的东西,没有什么必然性,所以你按照这么来就行。

  1. js中 tab 缩进为 2 个字符;
  2. 不要省略区块大括号;
  3. 圆括号使用规范。如果是函数,函数名与左括号之间没有空格;其他情况,语法元素与左括号都有一个空格;
  4. 行尾的分号,js是允许不写分号的,但作为一句话,最好是加上
    • for、while、if、switch、try、函数声明可以没分号;
    • do...while、函数表达式等需要加分号
  5. js的缺点就是全局变量对任何模块都是可读可写,所以一般全局变量使用大写字母表示。例如:UPPER_CASE;
  6. 因为有变量提升的特性,最好是将变量的声明放在最前面;

其他的都是一个开发者的习惯了,一切看个人。

console 对象与控制台

console的使用就没啥好讲的,用多了,就属性了。看https://wangdoc.com/javascript/features/console.html这篇文章就行了。

相关文章

网友评论

      本文标题:04ES5--常用语法

      本文链接:https://www.haomeiwen.com/subject/tarwvktx.html