JavaScript-语法专题
一、数据类型的转换
概述
JavaScript是一种动态语言,变量没有类型限制,可以随时赋予任意值
强制转换:主要是值
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会自动转换数据类型。
不同类型的数据互相运算
123 + "abc"; // 123abc
对非布尔值类型的数据求布尔值
if ('abc') {
console.log('hello')
} // "hello"
对非数值类型的值,使用
+
,-
+ {foo: 'bar'} // NaN
- [1, 2, 3] // NaN
二、错误处理机制
Error实例对象:JavaScript解析代码,一旦发送错误,就会抛出一个错误对象。
var err = new Error("出错了");
err.message; // 出错了
原生错误类型
SyntaError
对象:解析代码时发送的语法错误ReferenceError
对象:引用一个不存在的变量时发生的错误RangeError
对象:一个值超出有效返回时发送的错误TypeError
对象:变量或者参数不是预期类型时发送的错误URLError
对象:是URL相关函数的参数不正确时抛出的错误EvalError
对象:eval
函数没有被正确执行时,会抛出EvalError
错误自定义错误
function UserError(message) {
this.message = message || '默认信息';
this.name = 'UserError';
} UserError.prototype = new Error();
UserError.prototype.constructor = UserError; new UserError("这是一个自定义错误")
throw语句:手动中断程序执行,抛出一个错误
if (x <= 0) {
throw new Error('x 必须为正数');
} // throw 它可以抛出任意类型,不单单只是Error对象
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);
}
// ...
}
finally代码块:不管程序是否出错,都会执行
JavaScript-语法专题的更多相关文章
- JavaScript:JavaScript语法的详细介绍
JavaScript语法:只要Java会了,基本上javascript语法就会了. ——变量的定义 ——程序的结构控制 ——数组操作 ——函数的定义即使用 基本的test.html代码如下,它会导入下 ...
- javascript语法详解
javascript语法:运算符 条件语句if...else... 条件语句switch 循环语句for 循环语句while 跳转语句 js运算符 1.算数运算符:+ - * % / ++ ...
- When Colon Scripting is comming(JavaScript语法扩充)
当冒号脚本来临-- JavaScript语法扩充 连续好几夜的不能安眠,得出结论就是,未来语言未来的编译器应该是支持语法定制规则和语法扩展的,这样使得编程语言不断进化以更利于人类使用!of cours ...
- Javascript语法基础
Javascript语法基础 一.基本数据类型 JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...
- JavaScript语法细节——引用与复制
原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关 ...
- 第九十八节,JavaScript语法、关键保留字及变量
JavaScript语法.关键保留字及变量 学习要点: 1.语法构成 2.关键字保留字 3.变量 任何语言的核心都必然会描述这门语言最基本的工作原理.而JavaScript的语言核心就是ECMAScr ...
- JavaScript 语法
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- JavaScript DOM 编程艺术(1)---> JavaScript语法
一. JavaScript语法目录 语法 操作 条件语句 循环语句 函数 对象 二. 具体内容 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一 ...
- JavaScript语法详解:JS简介&变量
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. JavaScript简介 Web前端有三层: HTML:从语义的角度,描 ...
- 读《javascript语法精粹》知识点总结
昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...
随机推荐
- jstl标注标签库
1. 常用标签 引入标签库: <%@ taglib prefix=”c” uri=”” %> 1. C 标签 (1)<c:out value=”” default=” ...
- nodejs 实践:express 最佳实践(四) express-session 解析
nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...
- 将代码托管到github,并生成链接访问
转眼间加入github的阵营已经两年多了,看到别人建立的个人博客挺好看的,因此,自己从此喜欢上了github,总结下自己的相关知识. 推荐学习Git的网址: 猴子都能懂的GIT入门 http://ba ...
- hdu 1087 最大递增和
思路和LIS差不多,dp[i]为i结尾最大值 #include <iostream> #include <string> #include <cstring> #i ...
- Scrapy框架之日志等级和请求传参
一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...
- Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can't find referenced pointcut XXX
一.问题描述及原因. 利用Aspect注解实现AOP的时候出现了error at ::0 can't find referenced pointcut XXX.一看我以为注解写错了,结果通过查询相关资 ...
- android startActivityForResult()
举例说我想要做的一个事情是,在一个主界面(主Activity)上能连接往许多不同子功能模块(子Activity上去),当子模块的事情做完之后就回到主界面,或许还同时返回一些子模块完成的数据交给主Act ...
- siebel学习笔记-应用/数据访问控制
应用/数据访问控制Siebel提供的两种主要的访问控制方式在View级别和Data(record)级别: 1.View级别的访问控制:一个企业通常按照功能进行工作的区分,分配给一个用户的功能决定了他能 ...
- siebel 界面搭建
Siebel界面的初步搭建都是基于Siebel Tools工具来创建的,其搭建步骤: 1. 首先先创建一个Project项目,点击project--->点 new Record--->输入 ...
- 生成centos7 安装脚本
[root@us-1-217 install]# cat gen7.py #!/usr/bin/env python # -*- coding: utf-8 -*- import os, crypt ...