js,那些好玩的不同数据类型,运算子和重要概念

72 阅读2分钟

这是Udemy上的一个课Understanding the Weird Parts,想的是学习学习js能力,同时好像听说这课很好!

1 Js里面Hoisting(变量提升)

1.1 Hoisting 是什么? 简单来说就是变量提升,就是把定义的变项放到最前面开始执行,var a和function b(){...},这就是宣告declare 1.2 定义变项时可以分为可以分成宣告(declaration)和给值(initialization)的两个过程,宣告在逐行执行程序之前,给值在hoisted之后

2 js undefined不是真的undefined !!

2.1 undefined也是一个值

image.png 结果是:

image.png

2.2 如果直接给初始化为undefined

image.png 结果为:

image.png 又变成了undefined了

lg:undefined 在宣告以后但是没有给值,not defined是该变项没有被宣告过,执行就会出现错误!

3 js 不同的execution context(执行上下文)的变项不会互相影响-了解function背后运作的逻辑

5.png 3.1 先建立global execution context(全局执行上下文),function a和b先建立在内存里面,如何开始逐行执行程序,执行到a的时候,在执行栈a然后是b,b执行完就离开,然后是a

1.png

lg:局域变量之间不影响,但是要是找不到该变量的值(局域里),就会往外继续找

4 js Scope Chain(作用域链) 和outer enviroment(外部环境)

lg:

5 异步(asynchronous)和事件队列(event queue)

5.1 synchronous指的是one at a time,也就是程序会逐列执行,一次执行一列; asynchronous多了一个a,指的就是more than one at a time,也就是程序在执行的时候会同时执行不只一列的代码。

5.2 如何执行异步事件 在JavaScript执行asynchronous callback的过程是这样的,它会先把所有的execution context的内容执行完毕后,才去执行“event queue”,event queue里面就包含像是鼠标点击或是http request的内容。 lg:就是把execution context的内容执行完毕,然后去执行event queue的内容

6 运算符的优先级(Precedence)和结合性(Associativity)

lg:

7 类型转换(coercion)

数字转化为字符可以简单的 var a = 1 ; a = a+""; 这样就可以了

image.png

利用coercion的特性可以创建默认值

5.png lg:name= name||''