zoukankan      html  css  js  c++  java
  • 在Javascript中 声明时用"var"与不用"var"的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录:

    1. 在Javascript中 声明时用"var"与不用"var"的区别

    Javascript声明变量时

    var a = 111;

    a = 111;

    两种方式一样吗?

    var a = 11;
    
    function test4(){
        var a = 22;
    }
    
    test4();
    
    console.log(a);

    结果是什么呢? 11

    这个好理解, 函数内的var a声明是内部变量,这时结果是第一个a的值.

    变动一下如下:

    var abc = 11;
    
    function test4(){
        abc = 22;
    }
    
    test4();
    
    console.log(abc);

    结果是什么呢? 22

    再改:

    function test4(){
        var aaa = 22;
    }
    
    test4();
    
    console.log(aaa);

    结果怎样? 运行报错了! ReferenceError: aaa is not defined!

    改:

    function test4(){
        var aaa = 22;
    }
    
    test4();
    
    console.log(test4.aaa);

    运行不会报错,输出结果是 undefined.

    函数或者对象构造内声明的变量是私有的. 外部无法访问到. 包括原型继承后的对象. 

    可是如果这样:

    function test4(){
        bbb = 33;
    }
    
    test4();
    
    console.log(bbb);

    结果是 33。

    这就是有var 和没有 var的声明的区别:

    很可怕假如一个大的项目,在这里改变了bbb的值, 并没有添加var 碰巧整个项目全局变量有个同名bbb被改变,不加var不是只作用在这个函数或对象内. 出了错误很难找.

    所以书写代码必须谨慎. 声明变量改加的就加不能怕麻烦. 结果是完全不同的.

    结论: (1).在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量

    使用var定义
    var a = 'hello World';
    function bb(){
        var a = 'hello Bill';
        console.log(a);   
    }
    bb()   // 'hello Bill'
    console.log(a);    // 'hello world'
    不使用var定义
    var e = 'hello world';
    function cc(){
        e = 'hello Bill';
        console.log(e);    // 'hello Bill'
    }
    cc()   // 'hello Bill'
    console.log(e)     // 'hello Bill'

    (2).在全局作用域下,使用var定义的变量不可以delete,没有var定义的变量可以delete.也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量不可以。

    (3).使用var 定义变量还会提升变量声明,即

    使用var定义:
    function hh(){
        console.log(a);
        var a = 'hello world';
    }
    hh()    //undefined
    不使用var定义:
    function hh(){
        console.log(a);
        a = 'hello world';
    }
    hh()    // 'a is not defined'

    这就是使用var定义的变量的声明前提。

    2. JS中的!=、== 、!==、===的用法和区别。

    var num = 1;
     
    var str = '1';
     
    var test = 1;
     
    test == num   //true 相同类型 相同值
     
    test === num  //true 相同类型 相同值
     
    test !== num  //false test与num类型相同,其值也相同, 非运算肯定是false
     
     
    num == str   //true  把str转换为数字,检查其是否相等。
     
    num != str   //false  == 的 非运算
     
    num === str  //false  类型不同,直接返回false
     
    num !== str  //true   num 与 str类型不同 意味着其两者不等 非运算自然是true啦

    (1). JavaScript"=="的作用

           == 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果。

    1. 当==两边的内容是字符串时,则比较字符串的内容是否相等。
    2. 当==两边的内容是数字时,则比较数字的大小是否相等。
    3. 当==两边的内容是对象或者是对象的函数属性时,则比较内存地址是否相等

    (2). ==和===的区别

          === 和 !== 只有在相同类型下,才会比较其值。

      ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase

    总结:

      ==和===的区别:"==" 只要求值相等; "===" 要求值和类型都相等

  • 相关阅读:
    2019-09-09 memcache
    2019-08-26 linux
    springmvc 实体与文件同时提交时需要注意的地方
    mysql linux转win平台 遇到的坑
    使用Redis为注册中心的Dubbo微服务架构(基于SpringBoot)
    基于SpringBoot+Redis的Session共享与单点登录
    Docker运行oracle12c注意事项
    mac MyEclipse2017 CI10安装破解心得
    zookeeper,hadoop安装部署其实与防火墙无关
    VirtualBox复制的虚拟机无法获取IP解决办法
  • 原文地址:https://www.cnblogs.com/study-everyday/p/6498716.html
Copyright © 2011-2022 走看看