在Javascript中 声明时用var与不用var的区别,== 和 ===的区别

news/2024/7/19 15:30:31 标签: html, javaScript, 变量声明, var, js
htmledit_views">

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定义的就成了全局变量。

 
  1. 使用var定义

    var a = 'hello World';
    function bb(){
    var a = 'hello Bill';
    console.log(a);
    }
    bb() // 'hello Bill'
    console.log(a); // 'hello world'

  1. 不使用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 定义变量还会提升变量声明,即

 

1.使用var定义

    function hh(){
    console.log(a);
    var a = 'hello world';
    }
    hh() //undefined

2.不使用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

总结:

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

 


http://www.niftyadmin.cn/n/1284348.html

相关文章

JVM性能调优-Java内存区域Java堆

简介:JVM内存模型之JAVA堆 1.是什么? 是Java内存区域中⼀块⽤来存放对象实例的区域, 【⼏乎所有的对象实例都在这⾥分配内存】 2.为什么? 此内存区域的唯⼀⽬的就是存放对象实例Java 堆(Java Heap)是 Java 虚拟机…

JVM性能调优-Java内存区域⽅法区

简介:JVM内存模型之⽅法区 1.是什么? 是各个线程共享的内存区域,它⽤于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据什么是类信息:类版本号、⽅法、接⼝ 2.为什么? 内存中存放类信息…

CSS3的nth-child() 和nth-of-type()选择器,表格奇偶行变色

奇偶数匹配 odd代表奇数,even代表偶数 li:nth-of-type(odd) {background-color: rgb(238, 238, 238);}li:nth-of-type(even) {background-color: white;} 倍数写法 :nth-child(2n1), :nth-child(2n-3) , :nth-child(4n3),可以这…

Window.getComputedStyle is not an object问题(找不到元素的问题同理)

解决方法 把引入js放在html的<body>后部 或者 把js语句写在html的<body>后部 从上到下运行&#xff0c;先解析head标签中的代码&#xff0c; &#xff08;1&#xff09;head标签中会包含一些引用外部文件的代码&#xff0c;从开始运行就会下载这些被引用的外部文…

JVM性能调优-运⾏时常量池

简介&#xff1a;JVM内存模型之⽅法区运⾏时常量池 1.是什么&#xff1f; 运⾏时常量池是⽅法区的⼀部分&#xff0c;Class⽂件除了有类的版本、字段、⽅法、接⼝等描述信息外&#xff0c;还有⼀项信息是常量池&#xff0c;⽤于存放编译器⽣成的各种字⾯量和符号引⽤&#xf…

从函数作用域和let var区别角度看循环体中鼠标点击事件的异常

目录 问题 作用域 函数 函数声明 函数调用 let 和 var 解决方法 1、let 配合for循环的独特应用 2、用函数把鼠标事件括起来再调用 问题 var block document.getElementsByClassName("block"); for (var i 0; i < block.length; i) {block[i].onmo…

JVM性能调优-Java程序员不可不知的对象创建底层步骤细节

简介&#xff1a;Java程序员不可不知的对象创建底层步骤细节 对象创建的流程步骤包括哪些 虚拟机遇到⼀条new指令时&#xff0c;⾸先检查这个对应的类能否在常量池中定位到⼀个类的符号引⽤判断这个类是否已被加载、解析和初始化为这个新⽣对象在Java堆中分配内存空间&#x…

JavaScript学习笔记(二)之函数篇

目录 1、参数检查 2、arguments 3、rest参数 4、小心你的return语句 5、变量提升 6、全局作用域 7、名字空间 8、局部作用域 9、常量 10、解构赋值 11、方法 12、间接调用apply 13、装饰器 14、高阶函数 15、map 16、reduce 17、map和reduce练习 18、filter…