Javascript诞生记
- Milido - 阮一峰的网络日志二周前,我谈了一点Javascript的历史. 今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的. 只有了解这段历史,才能明白Javascript为什么是现在的样子. 我依据的资料,主要是Brendan Eich的自述. "1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.
/**
*
* @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