一、数据类型的转换

  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代码块:不管程序是否出错,都会执行

JavaScript-语法专题的更多相关文章

  1. JavaScript:JavaScript语法的详细介绍

    JavaScript语法:只要Java会了,基本上javascript语法就会了. ——变量的定义 ——程序的结构控制 ——数组操作 ——函数的定义即使用 基本的test.html代码如下,它会导入下 ...

  2. javascript语法详解

    javascript语法:运算符 条件语句if...else...  条件语句switch  循环语句for  循环语句while   跳转语句 js运算符 1.算数运算符:+ - * % / ++ ...

  3. When Colon Scripting is comming(JavaScript语法扩充)

    当冒号脚本来临-- JavaScript语法扩充 连续好几夜的不能安眠,得出结论就是,未来语言未来的编译器应该是支持语法定制规则和语法扩展的,这样使得编程语言不断进化以更利于人类使用!of cours ...

  4. Javascript语法基础

    Javascript语法基础   一.基本数据类型   JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...

  5. JavaScript语法细节——引用与复制

    原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关 ...

  6. 第九十八节,JavaScript语法、关键保留字及变量

    JavaScript语法.关键保留字及变量 学习要点: 1.语法构成 2.关键字保留字 3.变量 任何语言的核心都必然会描述这门语言最基本的工作原理.而JavaScript的语言核心就是ECMAScr ...

  7. JavaScript 语法

    一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...

  8. JavaScript DOM 编程艺术(1)---> JavaScript语法

    一.  JavaScript语法目录 语法 操作 条件语句 循环语句 函数 对象 二.  具体内容 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一 ...

  9. JavaScript语法详解:JS简介&变量

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. JavaScript简介 Web前端有三层: HTML:从语义的角度,描 ...

  10. 读《javascript语法精粹》知识点总结

    昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...

随机推荐

  1. js之strict模式

    JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量: i = 10 ...

  2. css 条纹背景

    先介绍文章用到的二个知识点 background-size 属性 语法 background-size: length|percentage|cover|contain; css线性渐变 linear ...

  3. Zepto和Jquery区别

    ---恢复内容开始--- <zepto移动端事件> 1.$("#xx").tap(function(){ //tap在屏幕点击时触发 alert("sssss ...

  4. Android studio 配置使用maven

    安装nexus(略) 启动nexus 打开web(admin;admin123) http://127.0.0.1:8081/nexus 创建的demo 1 2 3 对应的本地目录 配置maven / ...

  5. db2的count()函数和sum()函数的用法

    一.count()函数可以使用参数,例如count(*)和count(列名) count(*)用来计算在指定条件下,满足条件的行数,例如: select count(*) from tablename ...

  6. (三)svn 服务器端之创建仓库

    创建仓库 svn服务端创建完成需要创建仓库,仓库中存放 要被管理的文件. 通过开始菜单进入  VisualSVN server manager: 主界面为: 右键点击Repositories创建仓库 ...

  7. 用 dbgrid 或 dbgrideh 如何让所显示数据自动滚动

    procedure TForm1.Timer1Timer(Sender: TObject);varm:tmessage;begin m.Msg:=WM_VSCROLL; m.WParamLo:=SB_ ...

  8. 数据结构与算法分析java——线性表3 (LinkedList)

    1. LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作.LinkedList 实现 Lis ...

  9. 第一次团队Scrum

                                    长大一条龙之成绩查询 一.项目介绍             本项目的意义在于锻炼团队的scrum能力,加强团队合作能力.确定本项目采用的 ...

  10. oozie 完整流程实例

    Oozie概述: Oozie是一个基于Hadoop工作流引擎,也可以称为调度器,它以xml的形式写调度流程,可以调度mr,pig,hive,shell,jar,spark等等.在实际工作中,遇到对数据 ...