JS 使用误区

这里将介绍 JS 的常见误区。

JS - 赋值运算符

if 条件语句中使用比较运算符 (==) 和 (===) 时要注意与赋值语句 (=) 的区别。
赋值语句返回变量的值,则if (i = 10) 等于 if (10) 结果为 true,if (j = 0) 结果为 false。

var x = 0, i, j;
		
if (x == 10);  // false
if (i = 10) ;  // true
if (j = 0);    // false

JS - 比较运算符常见错误

使用比较运算符时,数据类型会自动转换。以下示例中, "10" 会自动转换为 10,但是不会改变 y 的数据类型。

var x = 10, y = "10";
if(x == y) ;            //true
if(x === y) ;           //false
console.log(typeof y);  //string

(===) 需要值相等并且类型相等。注意 switch 语句会也是使用 (===) 进行比较。以下示例中,n = "2",执行的是 default 语句 :

var n = "2";
switch(n){     
	case (1):  
		console.log("n是1哈, typeof: "+ typeof n);
		break;
	case (2):
		console.log("n是2哈 , typeof: "+ typeof n);
		break;
	case (3):
		console.log("n是3哈 , typeof: "+ typeof n);
		break;
	default:
		console.log("n是: "+ n +" , typeof: "+ typeof n);
}

JS - 浮点型

JS 中的数字均保存为 64 位的浮点数(Floats)。
所有编程语言,包括 JS,都存在处理浮点值的困难 :

var x = 0.1;
var y = 0.2;
var z = x + y ;    // z = 0.30000000000000004
if (z == 0.3) ;    // false

这个问题可以用整数的乘除法来解决 :

var z = (x * 10 + y * 10) / 10;       // z 的结果为 0.3

JS - 字符串分行

字符串中使用断行语句,示例中x。但是,在字符串中直接使用回车换行是会报错的,示例中y。

var x =
	"Hello World!";
	
var y = "Hello 
World!";
	
x ;
y ;  //报错

字符串断行需要使用反斜杠() :

var x = "Hello \
World!";

JS - return 语句

以下两个示例结果是一样的。因为 JS 会在一行的结尾自动添加关闭语句 (;)

function abc(a) {
	var x = 10  
	return a * x;
}

等于 :

function abc(a) {
	var x = 10;
	return a * x;
}

JS - 数组中使用名字来索引

用名字来作为索引的数组称为关联数组(或哈希)。
JS 不支持使用名字来索引数组,只允许使用数字索引。

var person = [];
person[0] = "张三";
person[1] = 25;
var x = person.length;         // 3
var y = person[0];             // "张三"

使用名字作为索引存数据时,length值为 0。
这是因为这时 JS 会把数组重新定义为标准对象,数组的方法及属性将不能再使用,否则会产生错误。
以下示例中,person 会是对象,person = {name:"张三",age:25} :

var person = [];
person["name"] = "张三";
person["age"] = 25;
var x = person.length;         // 0
var y = person[0];             // undefined
console.log(typeof person);    // object

JS - 不能添加逗号

数组最后不能添加逗号。语法虽然没问题,但是在不同的浏览器可能会得到不同的结果
对象最后不能添加逗号。

var array = [5, 6, 7,];              // 数组最后不能添加逗号
var person = {name:"张三", age:25, }; //对象最后不能添加逗号

JS - undefined 和 null

在 JS 中, null 用于对象, undefined 用于变量的属性和方法。
对象只有先被定义才有可能为 null,否则为 undefined。 先判断对象是否定义,再判断对象是否 null :

if (typeof person !== "undefined" && person !== null) 

JS - 程序块作用域

很多新的 JS 开发者会认为打印i为 undefined,这是常见错误。 以下示例,for 代码块中 JS 不会创建一个新的作用域,定义的 i 的作用域是这个函数 :

for (var i = 0; i < 10; i++) {
	// 代码
}
console.log(i);  // 10