源: 因为js是弱语言, 就体现在js的变量是弱类型的, 在js中所有变量类型声明都用var, 而在其他强类型语言中,如java/c,必须有强制类型转换和类型检查才能编译通过等,
但是: 弱语言也有优势: 起码在写js条件判断表达式时可以直接用变量或者对象来判断
来人, 上代码:
// 代码很简洁, 先讨论当变量a为不同值时的条件表达式结果 var a; // 只声明变量 if (a) { alert('true'); } else { alert('false'); }
a的值 | 说明 | 表达式 if(a)的结果: |
var a; | 只声明不赋值 | false |
a = '' || a = "" || a = null || a = undefined | 当a为空串或null或undefined时,评估结果为false | false |
a = 'somevalue', ... | 当为a赋值后, 评估结果true | |
a = ' ' || a = " " | * a为空格, 空格也是一个字符, 评估结果为true | |
a = 0 || a = 0.0 | * 当a为数值0或0.0,0.00,评估结果为false,其他数值一律为true | |
a = f | 当a为函数对象, 且不带括号, 该函数对象定义了评估结果就为true,否则为false | |
a = f() | 当a为函数对象, 且带括号, 则先执行函数, 按照函数的返回结果来作为评估结果, 若无返回结果: 则为false,因为默认返回undefined | |
a = obj.pro1, a = obj.f1() | 当a为对象的属性或方法时, 按照a为单独带队属性或方法时的一样进行评估 |