本篇适合javascript新手或者学了前端一段时间,对js概念不清晰的同学~ ~。
<强>学习目的强>
本文针对javascript基础薄弱的同学,可以加深对javascript的理解。
本文将讲述以下几点对于初学者开说javascript(有的是大部分语言都有的)的坑
<强>讲解内容如下:强>
1。连等
2。我+ +
3。包装对象
4。引用类型
5。,,与| |
<强>讲解部分强>
<强> 1。连等强>
连等是常见的表达式,但是并不是所有情况都适合连等,
。//字面量连等得到想要的结果 var a、b; a=b=2;//2 b//2//引用类型连等不可预测 var arr1 arr2; arr1=arr2=[] arr1 [0]=10 arr2 [0]//10//引用类型连等使得两个引用指向一个对象,操作其中一个,两个值都变 >之前以上代码是常见的连等,有时候我们需要两个变量同赋值为一个值,我们就这样来操作,但是,如果是引用类型可不能连等赋值哦。
此外,连等赋值会有一个很大的漏洞,就是会将变量泄露到全局中去,上面代码我们没有将其泄露,但看下面代码:
函数fn (num) { var=b=num;//num b//num } fn (10)//报的错 b//10//我们并不没有定义全局变量b >之前可以看的到,我们执行了fn函数后,全局作用域中出现了b变量,这是为什么& # 63;看var=b=num这句话,这句话可以分成两句来看
var一 a=b=num//只声明了 >之前我们其实只声明了一个变量,连等的b并没有声明,由此可以知道,b被挂在了全局的窗口对象上,造成了变量泄露到了全局。
上面只是简单的例子,接下来我们看一个复杂点的例子
var={x: 1} var b=一个 一个。x=={y: 1} 一个。x//未定义 b。x//{y: 1} >之前这个例子是在一个测试题中看到的,乍一看,好像不明觉厉,但是一点都不难理解。
1。a和b是引用了类型,同指向了一个对象{x: 1}
2。一个。x引用了原对象的x属性,一个则为一个引用变量
3。a ={y: 1},只是将这一个引用变量的指针指向了另一个对象{y: 1}
4。一个。x=a,前者还是代表着原来的对象的x属性,也就是b引用的对象的x属性
5。赋值完毕。
可能你还没有理解,不要急,下面我们将解剖javascript引擎让你懂的明明白白
引擎的工作原理:引擎在解析javascript表达式时,会进行lh查询,园艺学会查询(详见《你不知道的javascript》),我将它们理解为lh(赋值),皇家园艺(查找)。
下面,就上面例子,我们来演示一下引擎的工作流程
var={x: 1}//引擎:我将要对一个变量lh(赋值),内容是{x: 1}//作用域:刚声明了一个变量,给你。 var b=一个//引擎:我将要对一个变量RHS(查找)//作用域:你刚刚给它韩了,给你吧//引擎:我将要对b变量lh(赋值),内容为一个变量指向的对象//作用域:刚声明了b变量,给你。 一个。x=={y: 1}//引擎:我将要对一个进行lh(赋值),内容是另一个对象{y: 1}//作用域:可以,给你,但好像还有其他命令,先不要赋值。//引擎:是的,下一步我还需要对。x进行lh(赋值),内容是将要改变一变的量//作用域:可以,变量指向的对象有x属性,不过马上一个就改变了,不过没关系,b变量也指向那个对象,赋值完后,你可以用b变量引用旧对象。//引擎:了解了,我先把一个变量赋值为一个新的对象,然后把原来的一个变量指向的对象的x属性赋值为新。 一个。x//未定义//引擎:我需要拿到一个变量指向的对象的x属性//作用域:你刚刚改变了一个的指向,现在的一个指向的对象已经没有x属性了 b。x//{y: 1}//引擎:我需要拿到b变量指向的对象的x属性//作用域:你是想拿到你旧对象的x属性吧,给你,不过已经被你在之前改变了值,现在b.x的值就是一个指向的新对象的值。 >之前以上是我的理解,没有权威认证。想详细了解执行过程,请参考《你不知道的javascript》,如果本节有误,请指出。
<强> 2。+ +操作符强>
大家最很常用+ +操作符,其实也没什么很大奇特之处,但是对于新手入门的你是否真正了解他。
javascript基础知识讲解