《JavaScript权威指南》真是名符其实的好书!真遗憾初学JavaScript时没有立即读这本书,甚为遗憾。不过小有经验之后读来更是有如醍醐灌顶一般,许多之前遇到的奇怪问题和读不懂的代码都迎刃而解。这里简要记录一下其中觉得颇有价值的一些知识点。不过真心要学好JavaScript的同学还是耐心读完全书吧,虽然这本书900多页,厚得令人生畏,但真的读来不遗憾,非常有意义。
第一篇笔记的内容主要涉及:关键字、特殊值、数据类型及转换等。
javascript区分大小写,xhtml也区分大小写,但是html不区分大小写。(所以说html不够严格嘛~)
javascript保留字、ECMA扩展保留的关键字、javascript预定义的全局变量名或函数名:
这几个知识点特别容易弄混。我个人的理解是:
- javascript保留字:真正意义上的保留字(关键字)
- ECMA扩展保留的关键字:结合java、C++等面向对象语言的思路,将来有可能新加入的关键字
- javascript预定义的全局变量名或函数名:javascript语言中提供的有用的常用的变量和函数
这几个知识点一般是按照字母顺序给出,但我觉得有时候不容易记住,所以按它们的功能进行了小归类:
(1)javascript保留字
- if分支语句:if, else
- switch分支语句:switch, case, default, break
- 循环语句:do, while, for, continue
- 异常处理语句:try, catch, finally, throw
- 获取类型:typeof, instanceof
- 布尔值:true, false, null
- 函数相关:var, void, function, return
- 其他:in, this, with, new, delete
(2)ECMA扩展保留的关键字
- 基本数据类型:byte, char, boolean, int, short, long, float, double, enum
- 继承:implements, extends, super
- 类与接口:class, interface
- 用来修饰函数的关键字:abstract, native, static, final, const, volatile, synchronized
- 导入导出:export, import
- 访问权限:private, protected, public
- 其他:goto, package, throws, transient, debugger
(3)javascript预定义的全局变量名或函数名
- 数据类型:Number, Boolean, String, undefined, Object, Array, Function, Date, Math, RegExp, Error
- 错误类型:EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
- 编码:decodeURI, decodeURIComponent, encodeURI
- 转义:escape, unescape
- 类型转换:parentInt, parentFloat
- 特殊值及判断:isFinite, isNaN, NaN, Infinity
- 其他:arguments, eval
最后注意:我们常用的函数alert()不属于上面的三类。
javascript数据类型:
- 整型直接量
- 八进制和十六进制的直接量
- 浮点型直接量(小数点和指数计数法两种方式)
- 特殊值
- 文本字符串:由Unicode字符、数字、标点符号等组成的序列
- 布尔值
- 小数据类型:null, undefined
- 已命名的值的无序集合
- 数组:有编号的值的有序集合
- 函数:具有可执行代码的对象
- 专用对象:对象的新的类:Date, Math, Error, RegExp
数字中的特殊值:
- Infinity:表示无穷大的特殊值
- NaN:特殊的非数字值(产生未定义的结果或错误时出现,如除0)
- Number.MAX_VALUE:可表示的最大数字
- Number.MIN_VALUE:可表示的最小数字(与0最接近的数字)
- Number.NaN:特殊的非数字值
- Number.POSITIVE_INFINITY:表示正无穷大的特殊值
- Number.NEGATIVE_INFINITY:表示负无穷大的特殊值
注意:NaN和任何数值都不相等,包括它自己在内,因此需要用isNaN()来检测。isFinite()用来检测一个数字是否是NaN、正无穷大或负无穷大。
javascript字符串常用函数:
- .length:长度
- .charAt(a):取得第a个字符(从0开始)
- .subString(a, b):取得下标为a到下标为b-1的子字符串
- .indexOf('a'):查找第一个字母'a'的位置
javascript各类型相互转换的对应值:
(1)undefined与其他类型转换:
- 布尔环境下:false
- 数字环境下:NaN
- 字符串环境下:undefined
- 对象环境下:Error
(2)null与其他类型转换:
- 布尔环境下:false
- 数字环境下:0
- 字符串环境下:null
- 对象环境下:Error
(3)布尔类型(true和false):
- 数字环境下:true为1,false为0
- 字符串环境下:true为"true",false为"false"
- 对象环境下:Boolean对象
(4)字符串(非空字符串与空字符串):
- 布尔环境下:非空为true,空为false
- 数字环境下:非空为字符串的数字值或NaN,空为0
- 对象环境下:String对象
(5)数字(Number对象:0、NaN、无穷、负无穷、任意其他数字):
- 布尔环境下:0和NaN时为false,无穷、负无穷和其他任意数字时为true
- 字符串环境下:0为"0",NaN为"NaN",无穷为"Infinity",负无穷为 "-Infinity",其他任意数字就是该数字字符串值
(6)其他对象:
- 布尔环境下:非空对象为true
- 数字环境下:空对象则为NaN,调用valueOf()方法若返回基本类型则使用该值,若返回对象自己则先调用toString()方法把对象转换为一个字符串,再把该字符串转换为一个数字
- 字符串环境下:调用toString()方法返回字符串的值
下一篇链接:《JavaScript权威指南》笔记(二)