三重水的博客

在变化当中不断记录自己,充实自己,浏览自己

面试笔记

javascript有几种弹出框,各有什么区别?

alert() 显示带有一段消息和一个确认按钮的警告框。

confirm() 显示带有一段信息以及确认和取消按钮的对话框。

prompt() 显示可提示用户输入的对话框。

最常用的数组方法有哪些?

unshift(), shift(), push(), pop(), silce(), splice(), join(), srot(), concat().

javascript如何实现继承?

类式继承

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//一、类式继承:
//定义一个类式继承的扩展函数
function extend(subClass, superClass) {
    var F = function(){};
    F.prototype = superClass.prototype;
    subClass.prototype = new F();
    subClass.superClass = superClass.prototype;
    subClass.prototype.constructor = subClass;
    if(superClass.prototype.constructor === Object.prototype.constructor) {
        superClass.prototype.constructor = superClass;
    }
}
//定义一个父类
function Person(name) {
    this.name = name;
}
Person.prototype.getName=function(){
    console.log(this.name);
};
//定义一个子类
function Author(name ,city) {
    var superClass = Author.superClass.constructor;//引用父类
    superClass.call(this, name);//用对象冒充的方法,把子类的this和参数传递给父类.从而达到继承父类的属性
    this.city = city;
}
extend(Author, Person);//继承父类的方法
//定义一个自己的方法
Author.prototype.getCity=function(){
    console.log(this.city);
};
//测试
var newAuthor = new Author('wen', 'hainan');
newAuthor.getName();
newAuthor.getCity();

原型式继承

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//二、原型继承:
//定义一个用于原型继承的函数
function clone(object) {
    var F = function(){};
    F.prototype = object;
    return new F();
}
//定义一个对象
var PersonObject = {
    name : 'name',
    getName : function() {
        console.log(this.name);
    }
};
var AuthorObject = clone(PersonObject);//继承父类Person的属性和方法
//测试
AuthorObject.name = 'wen';//定义一个自己的属性name用于覆盖父类的name属性,也可以定义一个自己的方法,用于覆盖父类的方法( 注:父类的属性和方法还是不会改变,因为子类定义自己的属性和方法只是一个覆盖,而不是修改父类的属性和方法)
AuthorObject.getName();

面向对象有几种写法?

面向对象的4种写法 代码:

1
2
3
4
5
6
7
8
9
10
//第一种:
function CicleOne(r) {
    this.r = r;
    this.area = function() {
        console.log('第一种:'+Math.PI * this.r * this.r) ;
    };
}
//测试
var newCicle = new CicleOne(2);
newCicle.area();
1
2
3
4
5
6
7
8
9
10
//第二种:
function CicleTwo(r){
    this.r = r;
}
CicleTwo.prototype.area = function () {
    console.log('第二种:'+Math.PI * this.r * this.r) ;
};
//测试
var newCicleTwo = new CicleTwo(3);
newCicleTwo.area();
1
2
3
4
5
6
7
8
9
10
//第三种:
var cicleObjectOne = {
    r : 1,
    area : function() {
     console.log('第三种:'+Math.PI*this.r*this.r)
    }
};
//测试
cicleObjectOne.r = 6;
cicleObjectOne.area();
1
2
3
4
5
6
7
8
//第四种:
var cicleObjectTwo = {};
cicleObjectTwo.r = 5;
cicleObjectTwo.area = function() {
    console.log('第四种:'+Math.PI*this.r*this.r);
};
//测试
cicleObjectTwo.area();

使用过哪些javascript框架,各有什么作用?

  • jquery: jquery是javascript的函数库,封装了很多方法。然我们写少的代码,做更多的事。
  • AngularJS : AngularJS 通过新的属性和表达式扩展了 HTML。 AngularJS 可以构建一个单一页面应用程序。

jquery中的attr()和prop()有什么区别?

当你用attr()获取复选框的checked属性(其中复选框没有设置checked属性)时,它会返回undefined,无论你勾选复选框或取消复选框,它都给你返回undefined;要是给复选框设置了checked属性,则它不管你选中或未选中复选框,他都会返回checked,这不是我们想要的结果。 而当你使用prop获取复选框的checked属性时,它会对应你选中或未选中返回true或false; 所以,当我们需要处理内置属性的值是true或false时,使用prop()就可以达到我们预期想要的处理效果。

什么是xss攻击,如何防御xss攻击?

xss攻击是跨站脚本攻击。xss是经常出现在web应用中的安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中。 防御: -对用户提交的代码进行匹配检查,对提交的信息含有“javascript”的代码进行过滤。 -对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。 -实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。 -确认接收的的内容被妥善的规范化,仅包含最小的、安全的标签(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript)。

评论