首页 > PHP资讯 > HTML5培训技术 > 总结javascript的那些怪癖

总结javascript的那些怪癖

HTML5培训技术

/**
*
* @authors Benjamin(http://blog.csdn.net/cuew1987)
* @date 2013-11-29 14:04:00
* @content 总结javascript的那些怪癖(trick)
*/

/**
* trick01:NaN是个数值
* NaN:表示某个值不是数值,但其本身又是数值,且不等于其自身
*/

console.log(typeof NaN);//numberconsole.log(NaN == NaN);//falseconsole.log(NaN === NaN);//false

/**
* trick02:Null是个对象
* Null:javascript中的五大基本类型之一,它有个唯一的值null, 即它的字面量,定义为完全没有任何意义的值。null 不是任何对象的实例:
*/

console.log(typeof null);//Objectconsole.log(null instanceof Object);//false

/**
* trick03:undefined
* undefined:undefined并不是 Script中的保留字,尽管它有特殊的意义,并且是唯一的方法确定变量是否未定义,但是它可以定义为变量
*/

var Benjamin;console.log(typeof Benjamin);//undefinedundefined = "My name is Benjamin";console.log(undefined == Benjamin);//true

/**
* trick04:函数可以执行自身
* 情况一:jQuery代码的封装
* 情况二:延迟函数中的应用
*/

//1.0(function($){})(jQuery);//2.0var name = "Benjamin";setTimeout((function(name){	return function(){		console.log(name);//Benjamin	}})(name),1000);var name = "Benjamin01";//2.1,此种也是初学者和面试经常遇见的问题var name = "Benjamin";setTimeout(function(){	console.log(name);//Benjamin01},1000);var name = "Benjamin01";

/**
* trick05:隐似类型转换,如:{}+{} = ? or [] + [] = ?
*/

console.log({} + {});//[object Object][object Object]console.log({	"name":"Benjamin"}+{	"age":20});//[object Object][object Object]console.log([] + {}); //[object Object]console.log({} + []); //[object Object]console.log([] + []); //空字符串

说到类型转换,下面来看看那些最根本的东东,ECMASCRIPT 5.1中的类型转换和测试:

详细见博文:javascript中的那些类型转换

/**
* trick06:等号(==)和不等号(!=)
*/

console.log(0   == false);//trueconsole.log(1   == true );//trueconsole.log(2   == true );//falseconsole.log("0" == false);//trueconsole.log("1" == true );//trueconsole.log("2" == true );//falseconsole.log(""  == 0    );//trueconsole.log(""  == false);//trueconsole.log("         " == 0    );  //trueconsole.log("         " == false);  //trueconsole.log("n 123 t" == 123  );  //true

/**
* trick07:没有使用var定义的变量名会自动创建全集变量
*/

function Benjamin(){	Ben = "Benjamin";}Benjamin();console.log(Ben);//"Benjamin"function Benjamin(){	var Ben = "Benjamin";}Benjamin();console.log(Ben);//ReferenceError: Ben is not defined

/**
* trick08:变量的作用范围
*/
参考链接:javascript引擎处理脚本的过程
/**
* trick09:类数组对象
*/
类数组对象:
1)具有 :下标索引访问、length属性
2)不具有:诸如push、forEach 以及 indexOf 等数组对象具有的方法
3)常见的类数组对象:
a)一些DOM方法,例如
document.getElementsByClassName()
document.getElementsByName()
document.getElementsByTagName()
b)特殊变量arguments
4)类数组对象转换为数组对象

5)类数组对象借用数组对象的方法
fn:数组对象中的方法,indexOf,slice,concat,push,pop,etc.
Array.prototype.fn.call(arguments, arg0, arg1, ...)
6)实例:

function Benjamin(){	var args = arguments;	console.log(args[0]);//1	console.log(args.length);//5	console.log(Array.prototype.slice.call(args,1));//[2, 3, 4, 5]	console.log(args.slice(1));//TypeError: args.slice is not a function}Benjamin(1,2,3,4,5);

后续补充...

HTML5培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持31不支持0