最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 《JavaScript 的诞生》

    正文概述 掘金(用户7118714082313)   2021-02-04   563

    JavaScript 历史和特点(查看原文)

    发明者

    首先,JavaScript 是由 Brendan Eich(布莱登) 发明的。公司要求给浏览器添加一个脚本功能,还必要要蹭 Java 的流量,他临危受命为了应付公司安排的任务,他只用10天时间就把 JS 的最初版本设计出来了。

    设计思路

    总的来说,他的设计思路是这样的:

    (1)借鉴C语言的基本语法;
    (2)借鉴Java语言的数据类型和内存管理;
    (3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
    (4)借鉴Self语言,使用基于原型(prototype)的继承机制。
    

    所以,Javascript 语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

    ECMAScript 出现

    • 1996 年 8 月 IE3 发布,支持 JScript(微软实现的 JS),浏览器大战开始,每家浏览器的脚本不太一样。
    • 1996 年 11 月,网景向 ECMA 提交语言标准,由于版权问题,JS 语言标准不叫 JavaScript,叫 ECMAScript。

    ECMAScprit 标准的制定

    • 1997 年 6 月,第一版 ECMAScript 发布。
    • 1999 年 12 月,第三版发布,这个版本使用最广。
    • 第四版,流产。
    • 2009 年 12 月,第五版发布,增加了一些功能。
    • 2015 年 6 月,第六版发布,新浏览器都支持这一版。
    • 之后每年发布一版,版本号以年份命名。

    JS 与 ECMAScript 的关系

    ECMAScript 是纸上的标准版,JS 是浏览器的实现,纸上往往落后于浏览器,先实现,再写进标准。

    Javascript的10个设计缺陷(查看原文 )

    1. 不适合开发大型程序

    Javascript 没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

    2. 非常小的标准库

    Javascript 提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。

    3. null和undefined

    null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。

    typeof null; // object
    typeof undefined; // undefined
    

    两者非常容易混淆,但是含义完全不同。

    var foo;
    alert(foo == null); // true
    alert(foo == undefined); // true
    alert(foo === null); // false
    alert(foo === undefined); // true
    

    在编程实践中,null几乎没用,根本不应该设计它。

    4. 全局变量难以控制

    Javascript 的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

    a = 1;
    (function(){
        b=2;
      alert(a);
    })(); // 1
    
    alert(b); //2
    

    5. 自动插入行尾分号

    Javascript 的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。

    比如,下面这个函数根本无法达到预期的结果,返回值不是一个对象,而是undefined。

    function(){
        return
           {
              i=1
           };
       }
    

    原因是解释器自动在 return 语句后面加上了分号。

    function(){
        return;
          {
            i=1
         };
      }
    

    6. 加号运算符

    +号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。

    alert(1+10); // 11
    alert("1"+"10"); // 110
    

    如果一个操作项是字符,另一个操作项是数字,则数字自动转化为字符。

    alert(1+"10"); // 110
    alert("10"+1); // 101
    

    这样的设计,不必要地加剧了运算的复杂性,完全可以另行设置一个字符连接的运算符。

    7. NaN

    NaN 是一种数字,表示超出了解释器的极限。它有一些很奇怪的特性:

    NaN === NaN; //false
    NaN !== NaN; //true
    alert( 1 + NaN ); // NaN
    

    与其设计NaN,不如解释器直接报错,反而有利于简化程序。

    8. 数组和对象的区分

    由于 Javascript 的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。Douglas Crockford 的代码是这样的:

    if ( arr &&
        typeof arr === 'object' &&
       typeof arr.length === 'number' &&
       !arr.propertyIsEnumerable('length')){
    
         alert("arr is an array");
       }
    

    9. == 和 ===

    == 用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。

    "" == "0" // false
    0 == "" // true
    0 == "0" // true
    false == "false" // false
    false == "0" // true
    false == undefined // false
    false == null // false
    null == undefined // true
    " \t\r\n" == 0 // true
    

    因此,推荐任何时候都使用 "==="(精确判断)比较符。

    10. 基本类型的包装对象

    Javascript 有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。

    new Boolean(false);
    new Number(1234);
    new String("Hello World");
    

    与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。

    alert( typeof 1234); // number
    alert( typeof new Number(1234)); // object
    

    关于Javascript的更多怪异行为,请参见Javascript Garden和wtfjs.com。


    起源地下载网 » 《JavaScript 的诞生》

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元