zoukankan      html  css  js  c++  java
  • JavaScript-语法专题

    一、数据类型的转换

    1. 概述

      JavaScript是一种动态语言,变量没有类型限制,可以随时赋予任意值

    2. 强制转换:主要是值Number(),String(),Boolean三个函数

      Number函数,可以将任意类型的值转化为数值

      原始类型值的转换

      // 数值:转换后还是原来的值
      Number(324) // 324
      
      // 字符串:如果可以被解析为数值,则转换为相应的数值
      Number('324') // 324
      
      // 字符串:如果不可以被解析为数值,返回 NaN
      Number('324abc') // NaN
      
      // 空字符串转为0
      Number('') // 0
      
      // 布尔值:true 转成 1,false 转成 0
      Number(true) // 1
      Number(false) // 0
      
      // undefined:转成 NaN
      Number(undefined) // NaN
      
      // null:转成0
      Number(null) // 0
      

      对象的转换:Number方法的参数为对象时,返回NAN,除非是包含单个数值的数组

      Number({a: 1}) // NaN
      Number([1, 2, 3]) // NaN
      Number([5]) // 5
      
      /*
      Number背后的转换规则
      第一步,调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,不再进行后续步骤。
      
      第二步,如果valueOf方法返回的还是对象,则改为调用对象自身的toString方法。如果toString方法返回原始类型的值,则对该值使用Number函数,不再进行后续步骤。
      
      第三步,如果toString方法返回的是对象,就报错。
      */
      

      String函数可以将任意类型的值转换为字符串,转换规则如下

      原始类型的转化

      • 数值:转为相应的字符串。
      • 字符串:转换后还是原来的值。
      • 布尔值true转为字符串"true"false转为字符串"false"
      • undefined:转为字符串"undefined"
      • null:转为字符串"null"
      String(123) // "123"
      String('abc') // "abc"
      String(true) // "true"
      String(undefined) // "undefined"
      String(null) // "null"
      

      对象的转化:如果String参数是对象,返回一个类型的字符串,如果是数组,返回数组的字符串形式

      String({a: 1}) // "[object Object]"
      String([1, 2, 3]) // "1,2,3"
      
      /*
      String的转换规则
      先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
      
      如果toString方法返回的是对象,再调用原对象的valueOf方法。如果valueOf方法返回原始类型的值,则对该值使用String函数,不再进行以下步骤。
      
      如果valueOf方法返回的是对象,就报错。
      */
      

      Boolean函数可以将任意类型的值转为布尔值

      undefined,null,0,NAN,"" 转换为false,其他的值全是true.

      三种情况时,JavaScript会自动转换数据类型。

      1. 不同类型的数据互相运算

        123 + "abc";  //  123abc
        
      2. 对非布尔值类型的数据求布尔值

        if ('abc') {
          console.log('hello')
        }  // "hello"
        
      3. 对非数值类型的值,使用+,-

        + {foo: 'bar'} // NaN
        - [1, 2, 3] // NaN
        

    二、错误处理机制

    1. Error实例对象:JavaScript解析代码,一旦发送错误,就会抛出一个错误对象。

      var err = new Error("出错了");
      err.message;    // 出错了
      
    2. 原生错误类型

      SyntaError对象:解析代码时发送的语法错误

      ReferenceError对象:引用一个不存在的变量时发生的错误

      RangeError对象:一个值超出有效返回时发送的错误

      TypeError对象:变量或者参数不是预期类型时发送的错误

      URLError对象:是URL相关函数的参数不正确时抛出的错误

      EvalError对象:eval函数没有被正确执行时,会抛出EvalError错误

    3. 自定义错误

      function UserError(message) {
        this.message = message || '默认信息';
        this.name = 'UserError';
      }
      
      UserError.prototype = new Error();
      UserError.prototype.constructor = UserError;
      
      new UserError("这是一个自定义错误")
      
    4. throw语句:手动中断程序执行,抛出一个错误

      if (x <= 0) {
        throw new Error('x 必须为正数');
      }
      
      // throw 它可以抛出任意类型,不单单只是Error对象
      
    5. try...catch结构:用于异常捕捉,防止程序报错,中断

      try {
          throw new Error("错误信息");
      } catch(error) {
          error.message;
      }
      

      为了捕捉不同类型的错误,catch代码块之中可以加入判断语句。

      try {
        foo.bar();
      } catch (e) {
        if (e instanceof EvalError) {
          console.log(e.name + ": " + e.message);
        } else if (e instanceof RangeError) {
          console.log(e.name + ": " + e.message);
        }
        // ...
      }
      
    6. finally代码块:不管程序是否出错,都会执行

  • 相关阅读:
    设计模式
    C++下char/string跟int型转换比较
    function
    流程控制
    运算符
    type
    language
    phpbasic
    html标签集合
    课题六
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10648633.html
Copyright © 2011-2022 走看看