《JavaScript语言精粹》--附录A :毒瘤

来源:互联网 发布:linux mysql5.7 编辑:程序博客网 时间:2024/06/06 05:10
/*毒瘤全局变量JS所有的糟糕特性之一,最为糟糕的一个就是它对全局变量的依赖三种方式创建全局变量:1. 在全局作用域放置一个var语句2. 在浏览器中,给window对象添加属性3. 直接使用未经声明的变量,称为隐式全局变量作用域声明变量的最好方式是在每个函数的开头部分声明所有变量*//*自动插入分号*/console.log((function() {return {message: "this is a message!"};})());console.log((function() {return {message: "this is a message!"};})());//输出:// undefined // Object {message: "this is a message!"} //分析:// 第一例函数内部return语句由于分号自动补全,实际上是:// return;// {// message : "this is a message!"// };// 所以,实际上并没有返回任何值,JS中所有函数都有返回值,如果没有明确指定,则为undefined/*UnicodeJS字符为16位,Unicode把一对字符视为一个单一的字符,JS认为一对字符是两个不同的字符*//*typeoftypeof null 值为 'object'typeof /a/ 一些实现会返回'object',有些返回'function'*/console.log(typeof null);console.log(typeof / ^ aaa$ / );console.log(typeof[]);console.log(typeof NaN);console.log(typeof undefined);//输出://object//object//object//number//undefined/*parseInt这是一个把字符串转换为整数的函数,在遇到非数字时会停止解析parseInt可以接受一个基数作为参数,建议总是加上这个基数参数*/console.log(parseInt("16"));console.log(parseInt("16asdf"));console.log(parseInt("0x16", 10));console.log(parseInt("0x16"));//输出:// 16// 16// 0// 22/*+打算用+去做加法运算,请确保两个运算数都是整数浮点数浮点数计算中小数可能不够精确,整数运算就是精确的NaN为IEEE754中定义的一个特殊的数量值,表示的不是一个数字,但typeof NaN的结果是numberNaN不等于它自己,需要检测,使用isNaN()函数伪数组JS没有真正的数组typeof [] 返回object需要判断是否为一个数组,使用Object.prototype.toString.apply(my_value) === '[object Array]'*/console.log(typeof []);console.log(Object.prototype.toString.apply([]) === '[object Array]');//输出:// object// true/*假值以下将被认为是假0 NumberNaN Number'' Stringfalse Booleannull Objectundefined Undefinedundefined和NaN并不是常量,他们是全局变量,可以改变它们的值,但不要这么做*/console.log(NaN in window);console.log(undefined in window);//输出:// true// true/*hasOwnProperty一个方法,他可能会被一个不同的函数甚至一个非函数的值所替换对象JS的对象永远不会是一个真的空对象,它永远有原型*/