在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"=="的作用
== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果。
- 当==两边的内容是字符串时,则比较字符串的内容是否相等。
- 当==两边的内容是数字时,则比较数字的大小是否相等。
- 当==两边的内容是对象或者是对象的函数属性时,则比较内存地址是否相等。
(2). ==和===的区别
=== 和 !== 只有在相同类型下,才会比较其值。
==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase。
总结:
==和===的区别:"==" 只要求值相等; "===" 要求值和类型都相等
转载于:https://www.cnblogs.com/study-everyday/p/6498716.html
在Javascript中 声明时用var与不用var的区别,== 和 ===的区别相关推荐
- Javascript 声明时用“var”跟不用var的区别
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...
- 如何在JavaScript中声明名称空间?
如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖? 我使用了以下内容: if (Foo == null || typeof(Foo) != "obje ...
- javascript中声明数组
声明数组的三种方式 var arr=new Array();//声明一个空数组对象var arr=new Array(length)//声明一个指定长度的数组var arr=[元素]//声明数组(最常 ...
- JavaScript中用var和不用var的区别
Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. varnum=1; 是在当前域中声 ...
- 【javaScript】JavaScript中一个等号、二个等号、 三个等号 的区别(详细例子)
一.单等于号 1.单等于号具有赋值作用 我们在定义变量时,会对变量进行赋值,例如a=1,就是把1赋值给a. 这就是在初始化对象的时候进行赋值. 2.单等于号具有引用对象作用 比如我们写了 var a ...
- JavaScript中一个等号、二个等号、 三个等号 的区别
一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. === 判断规则 如果类型不同,就[不相等] 如果两个都是数值,并且是同一个值,那么[相等]:(!例外 ...
- javascript中while循环、do....while与for循环的用法和区别
while语法: 1.while语法: while(循环条件){ 循环主体; } 计算表达式的值,当值为真(非0)时,则 执行循环体语句. 例: <script type="text/ ...
- JavaScript中var、let和const的区别
一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...
- python中声明变量 var_声明变量的方法 var、let、const
简介 "变量提升"意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确. 实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中. 声明变量的方 ...
最新文章
- Appium学习笔记2_Android获取元素篇
- jqGrid简单使用
- mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
- 他们说头不铁,别做机器人
- 2021暑假实习-SSM超市积分管理系统-day08笔记
- Maven搭建SpringMVC+Mybatis项目详解【转】
- mysql断言命令_mysql的触发模拟断言
- Delphi ArcEngine 创建比例尺
- 16. jQuery - 获取并设置 CSS 类
- DC-DC电路多种调制方式的介绍及对比
- turnserver.conf文件详解
- 103000大写加零吗_关于支票金额大写规范写零的问题,比如1008712元,100万后要不要加零...
- java--for循环的三种写法
- 使用阿里云邮箱发送邮件
- MT4 CRM 系统开发(一)
- 【Pygame小游戏】扫雷游戏50多岁了,但这款我能玩一年~(三个版本集合)
- C++ primer 第五版 练习题记录
- 【DSP教程】第36章 FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
- React Hook 监听路由切换实时同步渲染页面功能
- element修改el-table 表头的背景颜色横向渐变色 + 修改表头背景颜色