JavaScript总结提高.md

数据类型判断

数据类型分为基本数据类型和对象类型;变量的值类型分为基本类型(保存的基本类型的数据)和引用类型(保存的是地址值 array、 function、object )。

对于undefined和null的判断:

            let a;
            if (a === undefined ||  typeof a === 'undefined') {
                console.log('a没有定义')
            }
            let b = null;
            if (b === null) {
                //typeof b的值为 'null'
                console.log('b为null')
            }

对于数组的判断:

if (c instanceof Array) {
                console.log(typeof c);// object
                console.log( 'c是一个数组');
    }

undefined有2种判断方式。null和array的typeof都是object,所以需要特殊判断。

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
var auto = new Car('Honda', 'Accord', 1998);
console.log(auto instanceof Car);//true
console.log(auto instanceof Object);//true

全局执行上下文与函数执行上下文

全局执行上下文

在执行全局代码前,首先将window确定为全局执行上下文,然后,对全局数据进行预处理:①将var定义的全局变量初始化为undefined,然后添加为window的属性;②将function声明的全局函数添加为window的方法;③将this赋值给window。最后,开始执行全局代码。

函数执行上下文

在调用函数准备执行函数体前,创建对应的函数执行上下文对象,然后对局部数据进行预处理:将函数定义的形参赋值给函数体内的实参,并添加为执行上下文的属性;将arguments添加为执行上下文属性;将var定义的局部变量初始化为undefined并添加为执行上下文属性;将函数体内声明的function函数赋值给fun并添加为执行上下文方法;将this赋值给调用该函数的对象; 最后开始执行函数整体代码.

执行上下文举例:

<script>
    console.log('begin' + i)
    var i = 1
    test(1)
    function test(i) {
        if (i == 4) {
            return
        }
        console.log('test-begin:' + i)
        test(i + 1)
        console.log('test-end:' + i)
    }
    console.log('end' + i)
</script>
begin: undefined
test-begin: 1
test-begin: 2
test-begin: 3
test-end: 3
test-end: 2
test-end: 1
end: 1

变量提升与函数提升举例:

    function test() {

    }
    var test
    console.log(typeof test) //function

由打印结果可知,先执行变量提升,后执行函数提升

var作用域举例:

    if (!(b in window)) {
        var b = 234
    }
    console.log(b) //undefined

易错举例:

        var c = 1
    function c(c) {
        console.log(c)
        var c = 3
    }
    c(2) //Uncaught TypeError: c is not a function

这个还是变量提升与函数提升的问题.代码先执行变量提升 var c = undefined, 再执行函数提升,然后赋值c = 1,此时c是一个基本数据类型,再执行c(2))时,当然会报错.


   转载规则


《JavaScript总结提高.md》 刘星星 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
iOS中导航栏的使用总结 iOS中导航栏的使用总结
UIStatusBarUIStatusBar共20px,分为前景色和背景色。 前景部分:就是指的显示电池、时间等部分; 背景部分:就是显示黑色或者图片的背景部分; 设置statusBar的【前景部分】简单来说,就是设置显示电池电量
2018-06-04
下一篇 
JavaScript中的BOM使用总结 JavaScript中的BOM使用总结
BOM BOM(浏览器对象模型):BOM将浏览器的各个功能特性转换成对象,进而使我们通过JavaScript来访问和操作浏览器,控制浏览器的行为。 window对象window对象是BOM的核心,它表示一个浏览器的实例 ,代表的
2018-04-24
  目录