2020-04-06

                                    js面试题


1 var a=”2015”,请对变量a进行操作生成倒序排列的

var a="2015".splice("");

a.sort(function(a,b)){

return a>b?-1:1;
}

javaScript 原型,原型链 有什么特点

原型对象也是普遍的对象,是对象一个来自带隐式的 _proto_

属性,原型也有可能有自己的原型,如果一个对称对象不为null的话

我们称之为原链型。

eval是做什么的

它的功能是把对应的字符串解析称js代码运行;

应该避免使用eval,不安全,非常耗能.

javascript 继承的6种方法

1原型链继承 2 借用构造函数继承 3 组合继承

4原型式继承 5 寄生式继承 6 寄生组合式继承


JavaScript怎么清空数组?


怎么判断一个object是否是数组(array)?

使用 Object.prototype.toString 来判断是否是数组


什么是JavaScript闭包?

答:JavaScript允许使用内部函数,内部函数可以访问他们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数,当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包;

对象到数字的转换步骤?

如果对象有valueOf()方法并且返回元素值,javascript将返回值转换为数字作为结果

否则,如果对象有toString()并且返回原始值,javascript将返回结果转换为数字作为结果

否则,throws a TypeError

== 和 === 的不同

==是抽象相等运算符,而===是严格相等运算符。==运算符是在进行必要的类型转换后,再比较。===运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回false。使用==时,可能发生一些特别的事情,例如:1 == "1"; // true

1 == [1]; // true

1 == true; // true

怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个 DOM 片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的 Name 属性的值

getElementById() //通过元素 Id,唯一性

6.怎样添加、移除、移动、复制、创建和查找节点?

1)创建新节点

createDocumentFragment() //创建一个 DOM 片段

createElement() //创建一个具体的元素

createTextNode() //创建一个文本节点

2)添加、移除、替换、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替换

insertBefore() //插入

3)查找

getElementsByTagName() //通过标签名称

getElementsByName() //通过元素的 Name 属性的值

getElementById() //通过元素 Id,唯一性

函数内部 arguments 变量有哪些特性,有哪些属性,如何将它转换为数组?

arguments 所有函数中都包含的一个局部变量,是一个类数组对象,对应函数调用时的实参。如果函数定义同名参数会在调用时覆盖默认对象

arguments[index]分别对应函数调用时的实参,并且通过 arguments 修改实参时会同时修改实参

arguments.length 为实参的个数(Function.length 表示形参长度)

判断两个矩形是否重叠

用一个对象的数据来表示一个矩形的位置和大小:

{  x: 100,  y: 100,  width: 150,  height: 250}

事件委托是什么

利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!解析:1、那什么样的事件可以用事件委托,什么样的事件不可以用呢?

适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。

值得注意的是,mouseover 和 mouseout 虽然也有事件冒泡,但是处理它们的时候需要特别的注意,因为需要经常计算它们的位置,处理起来不太容易。

不适合的就有很多了,举个例子,mousemove,每次都要计算它的位置,非常不好把控,在不如说 focus,blur 之类的,本身就没用冒泡的特性,自然就不用事件委托了

判断两个 Set 是否相同

题目:完成 isSameSet 函数,它接受了两个 Set 对象作为参数,请你返回 true/false 来表明这两个 set 的内容是否完全一致,例如:

const a = {}const b = 1const c = 'ScriptOJ'const set1 = new Set([a, b, c])const set2 = new Set([a, c, b])isSameSet(set1, set2) // => true

.列举 3 种强制类型转换和 2 种隐式类型转

强制(parseInt,parseFloat,Number)、隐式(+ -)15.列举 3 种强制类型转换和 2 种隐式类型转换

强制(parseInt,parseFloat,Number)、隐式(+ -)

字体高亮函数

请你完成 highlight 函数,可以把模版字符串中的插入内容替换掉,并且插入文档以后显示红色。例如:

const yourName = 'ScriptOJ'const myName = 'Jerry'document.body.innerHTML = highlight`Hello, ${yourName}. I am ${myName}.

请说出三种减少页面加载时间的方法。(加载时间指感知的时间或者实际加载时间)

1.优化图片

2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)

3.优化CSS(压缩合并css,如margin-top,margin-left…)

4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)

5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)

6.减少http请求(合并文件,合并图片)。

.你能描述一下渐进增强和优雅降级之间的不同吗?

优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效.

渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。

下面代码输出什么?

输出是 xyz,这里的 emp1 通过 prototype 继承了 Employee的 company。emp1自己并没有company属性。所以delete操作符的作用是无效的。

在JavaScript中创建一个真正的private方法有什么缺点?

每一个对象都会创建一个private方法的方法,这样很耗费内存

观察下面代码

Employee = function(name, company, salary) {

  this.name = name || "";   

  this.company = company || "";

  this.salary = salary || 5000;


  // Private method

  varincreaseSalary = function() {

    this.salary = this.salary + 1000;

  };


  // Public method

  this.dispalyIncreasedSalary = function() {

    increaseSlary();

    console.log(this.salary);

  };

};


// Create Employee class object

varemp1 = newEmployee("John","Pluto",3000);

// Create Employee class object

varemp2 = newEmployee("Merry","Pluto",2000);

// Create Employee class object

varemp3 = newEmployee("Ren","Pluto",2500);

var Employee = function (name, company, salary) {

  this.name = name || "";   

  this.company = company || "";

  this.salary = salary || 5000;

  // Private method

  var increaseSalary = function () {

    this.salary = this.salary + 1000;

  };

  // Public method

  this.dispalyIncreasedSalary = function() {

    increaseSlary();

    console.log(this.salary);

  };

};

// Create Employee class object

var emp1 = new Employee("John","Pluto",3000);

// Create Employee class object

var emp2 = new Employee("Merry","Pluto",2000);

// Create Employee class object

var emp3 = new Employee("Ren","Pluto",2500);

javascript 的 typeof 返回哪些数据类型

7 种分别为 string、boolean、number、Object、Function、undefined、symbol(ES6)、13.javascript 的 typeof 返回哪些数据类型

7 种分别为 string、boolean、number、Object、Function、undefined、symbol(ES6)、

apply和call的用途是什么,有什么区别?

①call和apply都属于Function.prototype的一个方法,他是js殷勤内在实现的,因为属于Function.prototype,所以每个Function对象实例(每个方法)都有call,apply属性,既然作为方法的属性,那他们的使用当然是针对方法,这两个方法容易混淆,因为作用一样,只是使用方法不同;

②语法:foo.call(this,arg1,arg2,arg3)==foo.apply(this,arguments)==this.foo(arg1,arg2,arg3);

③相同点:两个方法产生的作用相同;

④不同点:方法传递的参数不同;

利用js实现转盘抽奖

你可能感兴趣的:(2020-04-06)