总结javascript的那些怪癖

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

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

console.log(typeof NaN);//number
console.log(NaN == NaN);//false
console.log(NaN === NaN);//false

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

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

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

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

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

//1.0
(function($){

})(jQuery);

//2.0
var 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);//true
console.log(1   == true );//true
console.log(2   == true );//false
console.log("0" == false);//true
console.log("1" == true );//true
console.log("2" == true );//false
console.log(""  == 0    );//true
console.log(""  == false);//true
console.log("         " == 0    );  //true
console.log("         " == false);  //true
console.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);

 

后续补充...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值