最近在阅读《JavaScript面向对象编程指南》。因为面向的是也有未曾有编程经验的,所以这本书介绍的非常详细,还包括一些基础的内容。这篇文章就对第二章《基础数据类型、数组、循环及条件表达式》的内容做一个总结。这部分又不少容易忽略的知识点。如有错误的地方,请帮忙指正!
这里只包含我认为的一些容易忽略和错误的知识点,具体基础知识大家可以百度下载这本书。下面按照书中这一章节的顺序,依次展开:
变量
1. 不能以数字开头
2. 区分大小写
基本数据类型
1. 数字、字符串、布尔值、undefined、null
2. undefined 当我们视图访问一个不存在的变量或者已经定义而未初始化的变量的时候,我们会得到 undefined
3. null 代表没有值、空值,不代表任何东西。null 与 undefined 最大的不同在于,被赋予null 的变量通常已经定义了,只不过不代表任何东西。
4. 检测基本数据类型可以使用 typeof,它包括 "number"、"string"、"boolean"、"undefined"、"object"、"function"
5. JS 中还有一种 Infinity,代表超出JS 处理范围的数值。任何数除以 0 得到 Infinity。最大值Infinity,最小值 -Infinity。Infinity - Infinity 得到 NaN。Infinity与任何操作数原酸都得到Infinity。
6. NaN 属于数字,对某个特定数字执行操作失败,就得到NaN。如 var a = 10 * "f"; a 就等于 NaN。NaN具有传染性,运算包含NaN,就只能得到NaN。
7. 字符串转换 数字字符串用于运算的时候,该字符串会这当做数字使用(不适合于加法,加法还是字符串拼接)。字符串转换数字的偷懒方法是将字符串与1相乘,不过更好的选择是 parseInt。如果转换失败,则得到NaN。如 var d = "101 s";d * 1;就得到NaN。将其他类型转换字符串也有偷懒方法,将字符串与空字符串相加即可。
var s = "1s"; s++;
s => NaN;
1000 % "0" => NaN
undefined == null => true
var v = 0; // v = null 或者 delete v
v = v || 10;
v => 10
8. 特殊字符串 代表转义字符
代表换行
回车 制表符 u 后面的字符被认为是unicode。
9. 布尔值 如果一个非布尔值执行逻辑运算,则这个值仙贝转换为布尔值,再进行计算。如 var b = "one"; !b; 先将"one"转为true,让后取反。使用双重布尔值可以将任何值转换为等效的布尔值,如 !!'one' 就得到true。只有 "" null undefined 0 NaN false,会被双重布尔值转换为false。
10. 逻辑运算符优先级 ! > && > ||。逻辑运算符较多的时候,基变量使用括号限定操作符的优先级,这样代码容易理解,可读性高!
11. 惰性求值 如果一个连续的逻辑操作,在最后一个操作完成之前已经明确,则操作会终止,因为已经不会对最终结果有任何的影响了。如 true || false || true。如果不确定某个变量是否已经定义,可以这样处理,及时mynumber已经定义,仍然保留这个原来的值,否则初始化为10。但这样并不绝对安全,如果munumber被声明为那六个值如 0 或 null。
var mynumber = mynumber || 10;
12. == 和 != 存在默认类型转换,如 1 == "1" 得到true。
13. NaN 不等于任何东西,包括自己。NaN == NaN => false。
14. null 只能通过我们赋值,
var some = null;
typeof some => 'object'
var i = 1 + undefined;
i => NaN
var j = 1 + null;
j => 1
1 * undeifined => NaN
1 * null => 0
数组
1.
var a = [];
typeof a => "object"
2. 通过索引可以直接更改数组元素,可以直接通过索引一个不存在的位置添加元素。如果新元素与原数组末尾有间隔,默认值 undefined
var a = [1,2,3];
a[2] = "three";
a => [1,2,"three"]
a[3] = "four";
a => [1,2,"three","four"]
a[6] = "six";
a => [1,2,"three","four", undefined, undefined, "six"]
3. 删除数组元素 delete,delete a[1],然后被删除的值,变为undefined。
4. 简单if表达式可以用 三元运算符 ? : 代替。
5. 太多的else if 可以考虑用switch 代替if。
6. switch 的case语句不要忘记break,最好有default选项。