1JavaScript数据结构与算法--JavaScript基础

版权声明:本文为作者的原创文章,未经允许不得转载。 https://blog.csdn.net/lin5165352/article/details/82021457

JavaScript数据结构与算法

原型和原型链

判断一个函数是否是一个变量的构造函数用 instanceof。

如 a(对象) instanceof Object //返回true,b(数组) instanceof Object // 返回也是true,这个值得留意

感觉Firefox 浏览器的 console 比 chrome浏览器的用起来要舒服一些,在某些地方显示要更加直观一些,各有特色吧。

 构造函数,通常习惯采用左边的写法。

  • var a = {}  --------- var a = new Object()
  • var b = []  ---------- var b = new Array()
  • function Fn(){}-------var Fn = new Function()

原型规则:

所有的函数都有一个prototype(显示原型)属性,属性值是一个普通对象。

所有的引用类型(数组,函数,对象)的__proto__(隐式原型)属性值指向它的构造函数的“prototype”属性值。

下图中数组a有__porto__属性,没有prototype属性,a的构造函数是Array。 所以 a.__proto__ === Array.prototype。

(Array,Object,Function的构造函数都是函数function)

函数fn有显示原型和隐式原型。fn的构造函数是Function。所以fn.__proto__ === Function.prototype        

判断属性是否属于对象本身,有的浏览器for...in 会把原型中的属性也打印出来。所以可以添加一个判断。

var item 

for(item in f){
    if(f.hasOwnProperty(item)){
        console.log(item)
    }
}

判断一个对象a是否属于 Array/Object/Function 应该通过:a.__proto__ === Array.prototype ,a.__proto__ === Object.prototype ,a.__proto__ === Function.prototype 的方式,返回值 为 true 或者 false。

同步和异步的区别

  • 同步会阻塞代码执行,而异步不会。
  • alert是同步。setTimeout是异步
console.log(1)
setTimeout(function(){
    console.log(2)
},0)
console.log(3)
setTimeout(function(){
    console.log(4)
},1000)
console.log(5)
alert(6)
console.log(7)

 会先打印1、3、5,然后弹出6,点击确定后,再打印7、2、4.。

因为alert是同步,会阻塞。程序会停在alert(6)这个地方。而setTimeout是异步,不会阻塞,会等待程序执行完之后去执行。

          

前端使用异步的场景有哪些

  • 定时任务:setTImeout,setInverval
  • 网络请求:Ajax请求,动态<img>加载
  • 事件绑定

因为js是单线程的语言,上面列举的三个应用场景在执行过程中都需要等待。为了在等待过程中不卡顿,所以需要异步执行。

猜你喜欢

转载自blog.csdn.net/lin5165352/article/details/82021457