js部分-高频面试(第二部分)

1.new操作符具体干了什么呢

(1)隐式创建了一个空对象;
(2)将该对象的__proto__ 指向该构造函数的prototype原型;
(3)将this指向该空对象,在该对象上添加属性和方法
(4)隐式返回该对象

2.用过哪些设计模式

工厂模式

3.call()和apply()的区别和作用

call()和apply()可以改变函数内this的指向,让this指向特定的对象
不同点:参数列表不同,apply需要将参数封装为数组传递,call方法普通传递

4.JavaScript对象的几种创建方式

1字面量创建
2.实例创建(new关键字)
3.工厂模式创建
4.构造函数创建
5.原型创建
6.混合创建,构造函数(可变的)+原型(共享,不变的)

5.JavaScript对象的几种继承方式

1.原型链继承
2.对象冒充继承
3.组合继承(对象冒充+原型链)
4.寄生组合式继承

6.JavaScript原型,原型链

js每声明一个function,都有prototype原型,prototype原型是函数的一个默认属性,在函数的创建过程中由js编译器自动添加。也就是说:当生产一个function对象的时候,就有一个原型prototype。原型中存储对象共享的属性和方法。

原型链:
当你定义一个函数对象的时候,其内部就有这样一个链表关系。声明foo对象,自带了_proto_的属性,而这个属性指向了prototype,从而实现对象的扩展(例如继承等操作)

7.如何判断一个对象是否属于某个类

instanceof,返回布尔型

8.小贤有一条可爱的狗(Dog),他的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp),从这段描述可以得到
以下对象:
function Dog(){
this.wow = function(){
alert(‘wow’);
}
this.yelp = function(){
this.wow();
}
}
小芒和小贤一样原来也有一条可爱的狗,可是突然有一点疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。
请根据描述,按示例形式用代码来实现。(继承,原型,setInterval)

 function Dog() {
            this.wow = function() {
                alert('wow');
            }
            this.yelp = function() {
                this.wow();
            }
        }

        function MadDog() {
            Dog.call(this);
            var _this = this;
            this.yelp = function() {
                setInterval(function() {
                    _this.wow();
                }, 500);
            }
        }

9.使用正则表达式验证邮箱
xxx@xx.xx

/^[0-9a-zA-Z]+@[0-9a-zA-Z]+.[a-zA-Z]+$/

10.请用js去除字符串空格 var str = “fdf er re545 6565 2fdfd”

var arr = str.split(’ ‘);
var str1 = arr.join(’’);
console.log(str1);

11.判断字符串是否是这样组成的。第一个字符必须是字母,后面可以是字母、数字、下划线,总长度5-20.
用正则,正则表达式为:

var reg = /^[a-zA-Z]\w{4,19}$/

12.闭包的概念、特点以及使用规则

闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。

特点:
1.函数嵌套函数
2.函数内部可以应用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收

闭包中使用的变量会一直存储在内存中,类似全局变量 ,避免全局污染,可以解决全局变量的问题。

13.用闭包方式完成下面代码的修改,使得属性name,id外界不可见
User = function(){}
User.prototype={
id:"",
Name:"",
getId:function(){return this.id},
setId:function(){this.id = id},
getName:function(){return this.name},
setNmae:function(){this.name = name}
}

var User = function() {
            var id = "id";
            var name = "name";
            this.__proto__ = {
                getId: function() {
                    return id;
                },
                setId: function(_id) {
                    id = _id;
                },
                getName: function() {
                    return name;
                },
                setName: function(_name) {
                    name = _name;
                }
            }
        }
        var u = new User();
        u.setId("007");
        u.setName("tom");
        console.log(u.name, u.getName()); //undefined,tom

14.创建ajax的过程

 function ajax(type, url, callback, params) {
            //1.创建请求对象
            var xhr = new XMLHttpRequest;
            //2.发生请求
            if (type == 'get' || type == 'GET' && params != undefined) {
                xhr.open(type, url + '?' + params, true);
            } else {
                xhr.open();
            }
            //3.获取响应数据
            xhr.onreadystatechange = function() {
                if (this.readyState === 4 && this.status === 200) {
                    callback(this.responseText)
                }
            };
            //4.发生数据
            if (type == 'post' || type == 'POST' && params != undefined) {
                xhr.send(type, params);
            } else {
                xhr.send(null);
            }
        }

15.ajax请求的时候get和post方式的区别,什么时候用post

1、get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。当然在Ajax请求中,这种区别对用户是不可见的
2、get传输数据容量小,不安全,post传输数据内容大,更加安全;当向服务器发生一些数据的时候选择post比较安全

16.ajax请求时,如何解释json数据

如果是字符串形式的json:eval("("+ajax.response+")")
如果是本地的json文件:JSON.parse(data)

17.同步异步的区别?

同步代码会依次执行,执行完这一行,执行下一行 异步代码执行不按顺序,‘跳过’执行,待其他某些代码执行完后,再来执行
异步代码会在同步代码之后执行,同步执行完之后才会执行异步

18.常见的http状态码

1xx 代表请求已接受
2xx 代表请求已成功被服务器接收、理解并接受
3xx 代表客户端需要采取进一步的操作才能完成请求
4xx 表示请求错误
5xx 代表了服务器在处理请求的过程中又错误或者异常状态发生

19.eval的作用是

eval函数是强大的数码转换引擎,字符串经eval转换后得到一个javascript对象,

举简单例子:
var a = eval(5);等效于var a = 5;
var a = eval(“’5′”);等效于var a =5;
var obj = eval(({name:’cat’,color:’black’}));等效于 var obj = {name:’cat’,color:’black’};
eval(“alert(‘hello world!););等效于 alert(‘hello world!);

20.解释touch.js以及使用场景
21.touch.js如何监听事件?有哪些事件
22.touch.js事件配置
23.使用touch.js快速搭建移动端页面

24.$(document).ready()方法和window.onload有什么区别

时间:前者先执行
$(docunment).ready()是在DOM文档结构绘制完成后,执行,不必等待页面所有元素加载完成
widows.onload是在页面包括图片在内的所有元素加载完成后执行 执行方法数量不同
$(document).ready()可以一次执行多个方法
windows.load只执行一个

25.jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝

浅拷贝(只复制一份原始对象的引用,也就是地址) var newObject = $.extend({}, oldObject);

深拷贝(对原始对象属性所引用的对象进行递归拷贝) var newObject = $.extend(true, {},
oldObject);

26.jQuery中attr和prop的区别以及使用场景

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

处理表单元素的时候使用prop方法
对于dom自定义属性使用attr方法

27.jQuery里的each()是什么函数?你是如何使用它的

遍历函数,又称迭代函数,
对于数组,对象等使用$.each(obj,fn);

遍历节点的时候使用$(‘select’).each(fn);

28.jQuery对象和DOM对象是怎样转换的

jQuery转DOM —$(‘DOM’)[0]

DOM转jQuery—$(DOM)

29.jQuery中使用过哪些插入节点的方法,他们的区别是什么

方法描述
append()向每个匹配的元素内部追加内容
appendTo()功能跟append()一样,只是颠倒了append的操作
prepend()向每个匹配的元素内部前置内容
prependTo()
after()在每个匹配的元素之后插入内容
insertAfter()
before()在每个匹配的元素之前插入内容
insertBefore()

30.简单讲述一下jQuery是怎么处理事件的,有哪些事件?

31.jQuery中有事件冒泡吗,它是怎么执行的,如何来停止冒泡事件

有事件冒泡,
由内向外触发,触发子元素,父元素也会受到影响

停止冒泡:
使用stopstopPropagation;
使用retrun false;
使用阻止默认行为preventDefault;

32.jQuery中$(this)和this之间的区别

$(this)是一个Jquery对象,有各种方法可以给我们调用;

this则是html中的当前元素,即使是在Jquery方法中引用this,它依然是html元素,只有当你写成$(this)才会转变成一个Jquery对象。

33.怎么解决跨域问题

1.服务器允许跨域
2.使用代理服务器(中转服务器)
3.第三方软件—live server
4.jsonp技术----核心技术:利用script标签中的src属性

34.ajax的缺点

优点:
1.不需要插件支持
2.优秀的用户体验
3.提高web程序性能
4.减轻服务器和带宽的压力

缺点:
1.破坏了浏览器的前进、后退按钮的正常功能
2.对搜索引擎支持不足

35.ajax如何实现异步定时5秒刷新

 setInterval(function(){
host = window.location.host
$.post(“http://+host+"/index.php/Article/cpMes/value/1");
},5000);

36.页面编码和被请求的资源编码如果不一致如何处理

比如:http://www.yyy.com/a.html 中嵌入了一个http://www.xxx.com/test.js a.html
的编码是gbk或gb2312的。 而引入的js编码为utf-8的 ,那就需要在引入的时候

同理,如果你的页面是utf-8的,引入的js是gbk的,那么就需要加上charset=“gbk”.

37.jQuery中$.get()提交和$.post()提交有区别吗

1.参数传递机制不一致:
    get:在请求地址中传递参数
    post:在再请求方法(请求体)中传递参数
2.传递的数据量大小不一致
     get:有大小限制(最大2k)
     post:理论上没有限制
3.安全性
     get:参数在地址中传递,会在浏览器中被缓存,
     post:不会有缓存

38.jquery.extend与jquery.fn.extend的区别

jquery.extend是为jQuery对象新增方法
jquery.fn.extend是为元素对象新增方法

39.解释什么是Zepto,jQuery和Zepto的区别在哪里

zepto是移动端开发框架,是jQuery的轻量级替代品,API及语句与jQuery相似,但文件更小(可压缩至8k),是目前功能完备的库中,最小的一个。为了保持源码的精简,Zepto默认只加载一些模块,当需要某些模块时,可以把对应的模块加载进来。
区别:
jQuery更多是在PC端被应用,因此考虑了很多兼容性问题,zepto.js则是直接抛弃了兼容问题,显得更加轻盈。
Zepto.js在移动端被运用的更加广泛
jQuery的底层是通过DOM来实现效果的,而Zepto.js是用css3来实现的
Zepto.js可以说是jQuery的轻量版

40.Zepto事件委托?
41.Zepto相关事件以及使用

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个爱编程的男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值