A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹老师 黑马粉丝团   /  2017-9-5 12:51  /  1014 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

二、JS基础
1、javascript的typeof返回哪些数据类型
string number array object function Boolean undefined

数组(Array)、日期对象(Date)、正则(RegExp)、 Math  =>object

考点:使用typeof检测数据类型

扩展:如何检测数组类型?
Array.isArray(); 浏览器兼容性:IE9+  
toString.call([]);//”[object Array]”
[] instanceof Array
var arr=[];
arr.constructor;//Array

2、例举3种强制类型转换和2种隐式类型转换?
强制类型转换:自己通过函数来进行数据类型转换
举例:(parseInt,parseFloat,Number())


隐式类型转换:JS引擎自动帮我们转换的
举例:==、 console.log()、 alert() 、if() 、+-*/

扩展:通过==比较两边的值是否相等的结果?
1==’1’
null==undefined
3、split() join() 的区别
split()将字符串按照指定的字符分割成一个数组,并返回
join()将数组用指定的字符连接成一个字符串,并返回

4、数组方法pop() push() unshift() shift()
栈方法:
push()尾部添加,返回 数组长度
pop()尾部删除,返回 被删除的元素

队列方法:
unshift()头部添加 ,返回 数组长度
shift()头部删除,返回被删除的元素
5、事件绑定和普通事件有什么区别
普通事件:给html元素添加一个特定的属性(比如:onclick)
事件绑定:js代码中通过标记(id tag class)获取元素,给元素添加特定的方法(比如onclick)
传统事件绑定和符合W3C标准的事件绑定有什么区别?
div1.onclick=function(){};
<button  onmouseover=””></button>
1、如果说给同一个元素绑定了两次或者多次相同类型的事件,那么后面的绑定会覆盖前面的绑定
2、不支持DOM事件流 事件捕获阶段目标元素阶段=>事件冒泡阶段

addEventListener
1、如果说给同一个元素绑定了两次或者多次相同类型的事件,所有的绑定将会依次触发
2、支持DOM事件流的
3、进行事件绑定传参不需要on前端
addEventListener(“click”,function(){},false);//此时的事件就是在事件冒泡阶段执行

ie9开始,ie11 edge:addEventListener

ie9以前:attachEvent/detachEvent
1、进行事件类型传参需要带上on前缀
2、这种方式只支持事件冒泡,不支持事件捕获
事件绑定是指把事件注册到具体的元素之上,普通事件指的是可以用来注册的事件
6、IE和DOM事件流的区别
IE9以前:attachEvent(“onclick”)、detachEvent(“onclick”)
IE9开始跟DOM事件流是一样的,都是addEventListener

比较attachEvent和addEventListener:
1、attachEvent只支持事件冒泡 addEventListener既支持事件冒泡,也支持事件捕获
2、参数:attachEvent事件类型需要on前缀 addEventListener事件类型不需要on前缀
3、如果使用attachEvent对一个元素的目标阶段绑定了多次事件,那么会按照绑定顺序的相反顺序进行触发
如果使用addEventListener对一个元素的目标阶段绑定了多次事件,那么会按照绑定顺序进行触发

7、IE和标准下有哪些兼容性的写法
a、获取事件对象:var ev = ev || window.event
var ev=ev?ev:window.evnet;
srcElement:IE9之前的浏览器用来获取事件目标元素
target:IE9+、ff、chrome用来获取事件的目标元素
b、获取事件目标元素:var target = ev.srcElement||ev.target
c、innerText
8、call和apply的区别
考点:call和apply的用法

call和apply相同点:改变函数中this的指向

不同点:函数参数的传递形式
call将函数参数依次传入
apply将函数参数用一个数组的形式传入

无参数调用:
function fn(){
    alert(this.name);
}
var p1={name:1};
fn.call(p1);
fn.apply(p1);
有参数调用:
function fn2(name,age){
    this.name=name;
    this.age=age;
}
var p1={};
fn2.call(p1,"张三",20);
fn2.apply(p1,["张三",20]);



9、如何实现js中的继承
考点:继承的多种方式(参考 高设6.3)
1、原型继承的第一种方式:
function Cat(name){
    this.name=name;
}
//原型继承
Cat.prototype.say=function(){
    alert("你好,我是一只猫,我叫:"+this.name);
}
2、原型继承第二种方式:
function Cat(name) {
    this.name = name;
}
function Animal() {}
Animal.prototype.run = function () {
    alert("动物跑");
};
Cat.prototype = new Animal();
Cat.prototype.constructor=Cat;
3、借用构造函数
function Cat(name,age) {
    Animal.call(this,name,age);
}
function Animal(name,age) {
    this.name = name;
    this.age=age;
}
4、经典继承
function create(obj) {
        if(Object.create) {
        return Object.create(obj);       
        } else {
        function F(){};
        F.prototype = obj;
        return new F();
        }
}
function create(obj) {
If(object.create){
Return object.create(obj);
}else{
function F(){};
F.prototype=obj;
Return new F();
}
}

10、JavaScript this、闭包、作用域
this:指向调用上下文

作用域:定义一个函数就开辟了一个局部作用域,整个js执行环境有一个全局作用域

闭包:一个函数可以访问其他函数中的变量(闭包是一个受保护的变量空间)
var f=(function fn(){
    var name=1;
    return function(){
        name++;
        console.log(name);
    }
})();

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马