今天,被问到两个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

总结:

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

转载于:https://www.cnblogs.com/study-everyday/p/6498716.html

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

  1. Javascript 声明时用“var”跟不用var的区别

    Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...

  2. 如何在JavaScript中声明名称空间?

    如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖? 我使用了以下内容: if (Foo == null || typeof(Foo) != "obje ...

  3. javascript中声明数组

    声明数组的三种方式 var arr=new Array();//声明一个空数组对象var arr=new Array(length)//声明一个指定长度的数组var arr=[元素]//声明数组(最常 ...

  4. JavaScript中用var和不用var的区别

    Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. varnum=1; 是在当前域中声 ...

  5. 【javaScript】JavaScript中一个等号、二个等号、 三个等号 的区别(详细例子)

    一.单等于号 1.单等于号具有赋值作用 我们在定义变量时,会对变量进行赋值,例如a=1,就是把1赋值给a. 这就是在初始化对象的时候进行赋值. 2.单等于号具有引用对象作用 比如我们写了 var a ...

  6. JavaScript中一个等号、二个等号、 三个等号 的区别

    一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. === 判断规则 如果类型不同,就[不相等]  如果两个都是数值,并且是同一个值,那么[相等]:(!例外 ...

  7. javascript中while循环、do....while与for循环的用法和区别

    while语法: 1.while语法: while(循环条件){ 循环主体; } 计算表达式的值,当值为真(非0)时,则 执行循环体语句. 例: <script type="text/ ...

  8. JavaScript中var、let和const的区别

    一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...

  9. python中声明变量 var_声明变量的方法 var、let、const

    简介 "变量提升"意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确. 实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中. 声明变量的方 ...

最新文章

  1. Appium学习笔记2_Android获取元素篇
  2. jqGrid简单使用
  3. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
  4. 他们说头不铁,别做机器人
  5. 2021暑假实习-SSM超市积分管理系统-day08笔记
  6. Maven搭建SpringMVC+Mybatis项目详解【转】
  7. mysql断言命令_mysql的触发模拟断言
  8. Delphi ArcEngine 创建比例尺
  9. 16. jQuery - 获取并设置 CSS 类
  10. DC-DC电路多种调制方式的介绍及对比
  11. turnserver.conf文件详解
  12. 103000大写加零吗_关于支票金额大写规范写零的问题,比如1008712元,100万后要不要加零...
  13. java--for循环的三种写法
  14. 使用阿里云邮箱发送邮件
  15. MT4 CRM 系统开发(一)
  16. 【Pygame小游戏】扫雷游戏50多岁了,但这款我能玩一年~(三个版本集合)
  17. C++ primer 第五版 练习题记录
  18. 【DSP教程】第36章 FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
  19. React Hook 监听路由切换实时同步渲染页面功能
  20. element修改el-table 表头的背景颜色横向渐变色 + 修改表头背景颜色

热门文章

  1. eWebEditor不支持IE8的解决方法
  2. 机房收费--组合查询
  3. docker常用命令(总结)
  4. 深度 | 一条查询SQL的前世今生 —— ClickHouse 源码阅读
  5. 再深一点:面试工作两不误,源码级理解Spring事务
  6. 分布式事务不理解?一次给你讲清楚!
  7. 解决eclipse显示jar源代码中文乱码问题
  8. 牛逼哄哄的 RPC 框架,底层到底什么原理?
  9. 4.空悬指针和野指针
  10. TCP/IP网络中专有名词注解