《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权威指南》笔记(二)