Javascript的事件流模型都有什么

53 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

Javascript的事件流模型都有什么?

“事件冒泡”:事件逐级向上传播 “事件捕捉”:事件逐级向下传播,一直到最具体的 “DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡 split() join() 的区别

split():以指定的字符分割字符串返回一个数组,字符串方法 join(): 以指定的字符连接数组中元素返回一个字符串,数组方法 如何阻止事件冒泡

ev.stopPropagation(); 如何阻止默认事件

答案:return false 或者 ev.prevent Default(); JavaScript中如何检测一个变量是一个 String 类型?

typeof 变量 变量.constructor === String Object.prototype.toString.call(变量) // 推荐使用 javascript 的 typeof 返回哪些数据类型(至少六个)检测类型如下:

string、 number、 boolean 、undefined 、object 、function 、symbol(ES6之后新增的类型) 如何判断变量为NaN

通过isNaN()判断 isNaN(NaN) // 返回true isNaN(1000) // 返回false isNaN('小明') // 返回true(判断前会转换成number类型) isNaN('101') // 返回false 什么是JS变量提升 与 块级作用域

变量提升:就是会把变量定义提升到当前作用域的最上面 块级作用域:JS 中作用域有:全局作用域、函数作用域。没有块作用域的概念。ES6中新增了块级作用域。块作用域由 { } 包括,if 语句和 for 语句里面的{ }也属于块作用域。在外边不能调用块作用域里边定义的变量 null / undefined 的区别

null值:属于null类型,代表“空值",代表一个空对象指针;使用typeof运算得到 “object",所以你可以认为它是一个特殊的对象值。 undefined值:属于undefined类型,当一个声明的变量未初始化赋值时,得到的就是undefined。使用typeof运算得到“undefined", foo = foo || bar,这行代码是什么意思?为什么要这样写?

如果foo转为false, 则返回bar;否则直接返回foo 逻辑或:如果第一个值为true,直接返回第一个值;否则直接返回第二个值 逻辑与:如果第一个值为false,直接返回第一个值;否则返回第二个值、 target 和 currentTarget 区别

都是事件对象上的属性 event.target:返回触发事件的元素 event.currentTarget:返回绑定事件的元素(相当于事件中this) prototype 和 proto 的关系是什么

prototype: 所有函数都会有一个prototype属性, 它就是函数的原型对象 proto: 所有实例对象上都会有一个proto属性, 它等同于函数的原型对象 (补充说明) 原型链:因为所有实例对象都原型对象,原型对象也个对象, 所以它也自己原型对象(这样形成原型链)

答案:

所有的对象都拥有proto属性,它指向对象构造函数的 prototype 属性 所有的函数都同时拥有proto和 prototype 属性 函数的proto指向自己的函数实现 函数的 protytpe 是一个对象(原型) 所以函数的 prototype 也有proto属性 指向 Object.prototype Object.prototype.proto指向 null 请说一下你常用的数组方法(至少七个) 答案:

1)Array.push():此方法是在数组的后面添加新加元素,此方法改变了数组的长度: 2)Array.pop():此方法在数组后面删除最后一个元素,并返回数组,此方法改变了数组的长度: 3) Array.shift():此方法在数组后面删除第一个元素,并返回数组,此方法改变了数组的长度: 4) Array.unshift():此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度: 5)Array.isArray():判断一个对象是不是数组,返回的是布尔值 6) Array.concat():此方法是一个可以将多个数组拼接成一个数组: 7)Array.toString() : 把数组作为字符串返回 8) Array.join() :以指定字符拼接成字符串,然后返回 9) Array.splice:(开始位置, 删除的个数,元素) 10)Array.map():此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组 11)Array.forEach():此方法是将数组中的每个元素执行传进提供的函数,没有返回值,直接改变原数组,注意和 map 方法区分 12)Array.filter():此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回 13)Array.every():此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回 true,否则为 false: 14)Array.some():此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回 true,若所有元素都不满足判断条件,则返回 false: 15)Array.reduce():此方法是所有元素调用返回函数,返回值为最后结果,传入的值必须是函数类型: 与之相对应的还有一个 Array.reduceRight() 方法,区别是这个是从右向左操作