一,全局变量
1.全局变量可以被任何部分在任意时间改变,复杂化,降低可靠性
2.可能与子程序变量名相同,冲突可能导致程序无法运行,难以调试
三种声明全局变量模式
1.脱离任何函数的var foo = value
2.直接添加属性至全局对象,全局对象是所有全局变量的容器,在web浏览器中全局对象名为window,window.foo = value
3.直接未经声明的变量 - 隐式的全局变量 foo = value
二,没有块作用域,有函数作用域
函数中定义的参数和变量在函数外部不可见,而在一个函数中任何位置的定义的变量在该函数的任何地方可见。
function f1(){
var a=1;
function f2(){
if(false){
var a=2; //变量基于函数,而非基于语句块,没有块作用域
}
console.log(a); //undefined 未定义
}
f2();
console.log(a);//1
}
f1();
大多数语言中,一般声明变量都是在第一次用到它的地方,在javascript中是一个坏习惯,因为没有块作用域,更好的是在每个函数开头声明所有变量。
三,return语句返回一个值,值表达式必须和return在同一行上
return {
status:true
};
返回包含status成员元素的对象。
如果用
return
{
status:true
};
会返回undefined。
四,保留字不能用来命名变量或函数,当保留字被用作对象字面量的键值时,必须用引号,而且不能用点表示法,必须使用括号表示法。
var object = {case:value}; //非法
var object = {'case':value}; //ok
object.case = value; //非法
object['case'] = value; //ok
各浏览器对保留字使用限制上实现不同,以上语法在FF中合法,但其他浏览器不合法;再有不同的保留字行为也不相同。类似int/long/float等保留字在各浏览器中都可以做变量名及对象字面量的键值。但不建议使用任何保留字。
五,typeof - 识别运算数类型的字符串
但typeof null返回'object',更好的检测null的方法: my_value === null
对于正则表达式 typeof /a/,一些浏览器返回'object',另一些返回'function'
六,parseInt - 将字符串转换为整数
1.此函数遇到非数字时就停止解析,即parseInt('16')和parseInt('16 abc')产生结果相同,都是16.
2.如果字符串第一个字符是0,则基于八进制解析,而不是十进制。八进制中没有8,9数字,所以parseInt('08')和parseInt('09')结果为0。此函数可以接收一个基数作为参数,parseInt('08',10)结果为8。
七,浮点数
0.1+0.2不等于0.3
八,NaN
function isNumber(value){
return typeof value === 'number' && isFinite(value);
}
isFinite筛调NaN和Infinity,但是isFinite会试图把它的运算数转换为一个数字,如果运算数事实上不是一个数字,就会报错,所以加上typeof value === 'number'。
九,假值
0,NaN,'',false,null,undefined全部等于假,但它们是不可互换的。