Chapter2: Primitive Data Types, Arrays, Loops, and Conditions
Primitive Data Types
Strings
String Conversions
将字符串放在数学运算符号前后作为参数会导致字符串被隐性转换为数字类型变量,注意加号'+'除外,因为将字符串连接起来的操作也是用加号表示,所以这里有歧义性。
>>> var s = '1'; s = 3 * s; typeof s;
"number"
>>> s;
3
>>> var s = '1'; s++; typeof s;
"number"
>>> s;
2
如果转换不成功,就会返回NaN。
而将数字转换成字符串的一种简单做法就是将它与空字符串相加,因为任何其他类型的变量遇到加号都会被转换成字符串:
>>> var n = 1; n = "" + n; typeof n;
"string"
Booleans
Lazy Evaluation
这个概念本身很简单,就不多说,但是Javascript有一个特别的行为,就是在一个逻辑运算表达式中,如果遇见了非逻辑值作为参数,而前面的验证又通过了的话,那么它会返回这个非逻辑值本身:
>>> true || "something";
true
>>> true && "something";
"something"
这就是为什么你会见到很多人喜欢写类似下面的代码:
var mynumber = mynumber || 10;
如果mynumber还没有被定义的话,就给它赋值10;尤其是使用命名空间的时候,大多数人这样写:
var myNamespace = myNamespace || {};
不过要注意,这种写法也有负面的地方,假如mynumber的值是逻辑非值,比如0或者空字符串这样的值,那么它的结果可能不会是你预期的那样。
Comparison