zoukankan      html  css  js  c++  java
  • 用Java来比较JavaScript的一些特性

      由于是从java做到JavaScript,所以对强弱语言类型,还是比较敏感的。JavaScript是弱语言,只严格区分数据和指令。简单描述下自己对两者之间的一些区别吧。

      1、JavaScript变量的类型取决于右侧的对象。

    JavaScript:

    var variable_name = new Object();

    Java:

    Object variable_name = new Object();


      2、JavaScript没有块级作用域,

    Java:

    if(true) {
        Object a = 1;
    }
    System.out.println(a); // 编译错误,超出作用域

    JavaScript:

    if(true){
        var a = 1;
    }
    console.log(a); // 1 JavaScript没有块级作用域

    而JavaScript的作用域一般体现在函数作用域上。

      3.比较特别的是JavaScript会把声明提前,像这样

    function test() {
        console.log(a); // 输出undefined,而不是变量not defined,说明函数声明提前了,但是初始化没提前,所以输出的不是1
        var a = 1;
    }
    test();
    
    function test2(){
        var a = 1;
        if(true) {
           console.log(a); // 输出也是undefined,而不是1
           var a = 2;           
        }
    }
    test2();

      4.JavaScript没有像Java一样可以直接调用成员变量的语法,通常只能是:

    var data = {'one':1,'two':2};
    with(data) { // 模拟作用域,在use strict严格模式下会抛语法错误
      console.log(one);// 输出 1 
      console.log(two);// 输出 2

    }

      值得注意的是上面with使用的作用域内,只能对已有的属性进行操作,而不能创建新属性。同时在use strict模式下,还限制了arguments对象的callee和caller两个属性的使用,一用就会报错。之前接手的嵌入式web端有用setTimeout实现setInterval功能的,就是调用了callee,代表正在执行的方法,就好像接力棒一样,但明显这在严格模式下是无法使用的。

      5.在ECMAScript5的标准里多了一些函数式编程的方法,主要是Array对象的实例方法forEach、reduce,或者就是我们经常使用的回调,把函数作为参数传递的,跟高阶函数有点相似,但是没有返回函数。作为一个前端开发人员,对于下面这样的回调方法应该很熟悉

    $.post('url:getData',function(data){
        if(data) console.log(data);// 将函数作为参数传递进去,然后在post方法里面调用这个匿名函数
    });

      6.JavaScript无法正确地表示0.1这样的简单小数,尽管在数值上已经非常接近,但在进行equals类似的操作时仍会出错,解决方案有将小数点左右两侧的数据分开来计算之后再合并。

    JavaScript真是一门特别有魅力的语言,还有很多东西需要探索,自己给自己加加油 哈哈。

      

  • 相关阅读:
    类(抽象类与非抽象类)和接口
    Arduino学习——u8glib提供的字体样式
    Arduino学习——u8glib库资料整理
    Arduino学习——Arduino main 函数
    全局变量的初始化
    nmake学习笔记2
    Big Endian与Litter Endian
    nmake学习笔记
    重载操作符
    offsetof的意义
  • 原文地址:https://www.cnblogs.com/gabin/p/3699850.html
Copyright © 2011-2022 走看看