Heim  >  Artikel  >  Web-Frontend  >  JS-Interviewfragen (Muss für Interviews gelesen werden)

JS-Interviewfragen (Muss für Interviews gelesen werden)

PHP中文网
PHP中文网Original
2017-06-22 14:16:433632Durchsuche

1.Welche Datentypen werden von typeof in Javascript zurückgegeben?

  alert(typeof [1, 2]); //object 
    alert(typeof 'leipeng'); //string 
    var i = true;  
    alert(typeof i); //boolean 
    alert(typeof 1); //number 
    var a;  
    alert(typeof a); //undefined
    function a(){};
    alert(typeof a) //function

2. Nennen Sie Beispiele für 3 erzwungene Typkonvertierungen und 2 implizite Typkonvertierungen?
Forcing (parseInt() , parseFloat(),Number())
Implizit (==,!!)

3. Der Unterschied zwischen split() und join()
Ersteres wird in ein Array geschnitten, das Letzteres dient dazu, das Array in einen String umzuwandeln

4. Array-Methode pop() push() unshift() shift()
Push() fügt pop() tail zum Löschen hinzu
Unshift( ) head Shift()-Header hinzufügen und löschen

5. Was ist der Unterschied zwischen Ereignisbindung und gewöhnlichen Ereignissen:

var btn = document.getElementById("hello");
btn.onclick = function(){
alert(1);
}
btn.onclick = function(){
alert(2);
}
Ausführen Nur der obige Code. Ereignisse werden mithilfe der Ereignisbindungsmethode „Alert 2“ hinzugefügt.

Ereignisbindungsmethode:

var btn = document.getElementById("hello");
btn.addEventListener("click",function(){
alert(1);
},false);
btn.addEventListener("click",function(){
alert(2);
},false);
Durch Ausführen des obigen Codes wird zuerst Alarm 1 und dann Alarm 2 ausgelöst.

Die normale Methode von Beim Hinzufügen von Ereignissen wird das Hinzufügen mehrerer Ereignisse nicht unterstützt. Das untere Ereignis überschreibt das obere und mehrere Ereignisse können durch Ereignisbindung (addEventListener) hinzugefügt werden.
addEventListener ist nicht mit niedrigeren Versionen von IE kompatibel
Normale Ereignisse können nicht abgebrochen werden
addEventListener unterstützt auch Ereignis-Bubbling + Ereigniserfassung

6. Der Unterschied zwischen IE- und DOM-Ereignisströmen
1. Ausführungsreihenfolge unterschiedlich,
2. Parameter sind unterschiedlich
3. Ereignis hinzufügen auf oder nicht

7. Was sind die Kompatibilitätsschreibmethoden zwischen IE und Standards


8. Der Unterschied zwischen Call und Apply
var ev = ev || window.event 
document.documentElement.clientWidth || document.body.clientWidth 
var target = ev.srcElement||ev.target
Call-Methode:

Syntax: call(thisObj, Object1,Object2...)
Definition: Call Eine Methode eines Objekts. Ersetzt das aktuelle Objekt durch ein anderes Objekt.
Hinweis:
Mit der Aufrufmethode kann eine Methode anstelle eines anderen Objekts aufgerufen werden. Die Aufrufmethode ändert den Objektkontext einer Funktion vom Anfangskontext in das durch thisObj angegebene neue Objekt.
Wenn der Parameter thisObj nicht angegeben wird, wird das globale Objekt als thisObj verwendet.

Methode anwenden:
Syntax: apply(thisObj, [argArray])
Definition: Eine Methode eines Objekts anwenden und das aktuelle Objekt durch ein anderes Objekt ersetzen.
Hinweis:
Wenn argArray kein gültiges Array oder kein Argumentobjekt ist, wird ein TypeError verursacht.
Wenn weder argArray noch thisObj bereitgestellt werden, wird das Global-Objekt als thisObj verwendet und es können keine Parameter übergeben werden.

9.b Vererben Sie die Methode eines


10. So verhindern Sie Ereignissprudeln und Standardereignisse
function A( age, name ){ 
this.age = age;
this.name = name;
A.prototype.show = function(){
alert('父级方法');
}
function B(age,name,job){
A.apply( this, arguments );
this.job = job;
B.prototype = new A();
var b = new A(14,'侠客行');
var a = new B(15,'狼侠','侠客');


11. Hinzufügen, Löschen und Ersetzen der in einen bestimmten Kontaktpunkt eingefügten Methode
canceBubble()只支持IE,return false,stopPropagation()


12. Lokale Objekte, integrierte Objekte und Hostobjekte von JavaScript
obj.appendChid() 
obj.insertBefore()
obj.replaceChild()
obj.removeChild()
Lokale Objekte sind Array-Objekte, regexp usw. und kann mit neuen instanziiert werden

Die integrierten Objekte sind Load Math und andere Dinge, die nicht instanziiert werden können
Der Host ist das Dokument, Fenster usw., das mit dem Browser geliefert wird

13 Unterschied zwischen window.onload und document ready
window.onload befindet sich im Dom. Nachdem der Dokumentbaum geladen wurde und alle Dateien geladen sind, wird eine Funktion ausgeführt. Document.ready Die native Art verfügt nicht über diese Methode ().ready(function) in jquery. Nachdem der DOM-Dokumentbaum geladen wurde, wird eine Funktion ausgeführt (beachten Sie, dass der Abschluss des Ladens des Dokumentbaums nicht bedeutet, dass alle Dateien geladen wurden).
$(document).ready wird vor window.onload ausgeführt. window.onload kann nur einmal erscheinen, $(document).ready kann mehrmals erscheinen

14 = ="
Ersteres konvertiert den Typ automatisch, letzteres nicht

15. JavaScript-Richtlinie zum gleichen Ursprung
Ein Skript kann nur die Eigenschaften von Fenstern und Dokumenten aus derselben Quelle lesen . Die gleiche Quelle bezieht sich hier auf die Kombination aus Hostname, Protokoll und Portnummer

16. Was für eine Sprache ist JavaScript und welche Eigenschaften hat es?
Es gibt keine Standardantwort.
JavaScript ist eine wörtliche Skriptsprache. Es handelt sich um eine dynamisch typisierte, schwach typisierte, prototypbasierte Sprache mit integrierter Unterstützung für Typen. Sein Interpreter heißt JavaScript-Engine, ist Teil des Browsers und wird häufig in clientseitigen Skriptsprachen verwendet. Er wurde erstmals auf HTML-Webseiten verwendet, um dynamische Funktionen zu HTML-Webseiten hinzuzufügen. JavaScript ist mit dem ECMA-Standard kompatibel und wird daher auch ECMAScript genannt.
Grundfunktionen
1. Es handelt sich um eine interpretierte Skriptsprache (der Code ist nicht vorkompiliert).
2. Es wird hauptsächlich verwendet, um interaktives Verhalten zu HTML-Seiten (einer Anwendung unter Standard Universal Markup Language) hinzuzufügen.
3. Es kann direkt in HTML-Seiten eingebettet werden, aber das Schreiben als separate js-Datei erleichtert die Trennung von Struktur und Verhalten.
4. Plattformübergreifende Funktion, mit Unterstützung der meisten Browser, kann auf mehreren Plattformen ausgeführt werden (wie Windows, Linux, Mac, Android, iOS usw.).

17.Welche Datentypen gibt es in JavaScript?
Grundlegende Datentypen: String, Boolean, Number, Undefiniert, Null
Referenzdatentyp: Object(Array,Date,RegExp,Function)
Dann stellt sich die Frage, wie man ermittelt, ob eine Variable ein Array ist Datentyp?
Methode 1. Bestimmen Sie, ob es „Array-Eigenschaften“ hat, z. B. die Methode „slice()“. Sie können die Slice-Methode für die Variable selbst definieren, sodass sie manchmal fehlschlägt.
Methode 2.obj-Instanz des Arrays ist in einigen IE-Versionen falsch.
Methode 3. Beide Methoden 1 und 2 weisen Lücken auf und es wird eine neue definiert In der ECMA Script5-Methode Array.isArray() lautet die beste Methode zur Sicherstellung der Kompatibilität wie folgt:


18. Eingabefeld mit bekannter ID, Sie möchten den Eingabewert erhalten Dieses Eingabefeld, wie geht das? (Verwendet keine Frameworks von Drittanbietern)
if(typeof Array.isArray==="undefined")
{
  Array.isArray = function(arg){
        return Object.prototype.toString.call(arg)==="[object Array]"
    }; 
}

document.getElementById(“ID”).value

19.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)

var domList = document.getElementsByTagName(‘input’) 
var checkBoxList = []; 
var len = domList.length;  //缓存到局部变量 
while (len--) {  //使用while的效率会比for循环更高 
if (domList[len].type == ‘checkbox’) { 
      checkBoxList.push(domList[len]); 
} 
}

20.设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)

var dom = document.getElementById(“ID”); 
dom.innerHTML = “xxxx”
dom.style.color = “#000”

21.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?
直接在DOM里绑定事件:b28bc9950e24daa5d8431db20bacf9ca94b3e26ee717c64999d7867364b1b4a3
在JS里通过onclick绑定:xxx.onclick = test 
通过事件添加进行绑定:addEventListener(xxx, ‘click’, test) 
那么问题来了,Javascript的事件流模型都有什么? 
“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播 
“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的 
“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡

22.看下列代码输出为何?解释原因。
var a;
alert(typeof a); // undefined
alert(b); // 报错
解释:Undefined是一个只有一个值的数据类型,这个值就是“undefined”,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。

23.看下列代码,输出什么?解释原因。
var a = null; 
alert(typeof a); //object 
解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回”object”。

24.看下列代码,输出什么?解释原因。

var undefined; 
undefined == null; // true 
1 == true;   // true 
2 == true;   // false 
0 == false;  // true 
0 == '';     // true 
NaN == NaN;  // false 
[] == false; // true 
[] == ![];   // true

undefined与null相等,但不恒等(===) 
一个是number一个是string时,会尝试将string转换为number 
尝试将boolean转换为number,0或1 
尝试将Object转换成number或string,取决于另外一个对比量的类型 
所以,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。 
那么问题来了,看下面的代码,输出什么,foo的值为什么? 
var foo = "11"+2-"1"; 
console.log(foo); 
console.log(typeof foo); 
执行完后foo的值为111,foo的类型为String。

25.看代码给答案。

var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value);

答案:2(考察引用数据类型细节)

26.已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。
答案:alert(stringArray.join(“”))

27.已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。

function combo(msg){
    var arr=msg.split("-");
    for(var i=1;i<arr.length;i++){
        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
    }
    msg=arr.join("");
    return msg;
}

(考察基础API)
28.var numberArray = [3,6,2,4,1,5]; (考察基础API)
1) 实现对该数组的倒排,输出[5,1,4,2,6,3] 
numberArray.reverse()
2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]
numberArray.sort(function(a,b){return b-a})

29.输出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,则输出2014-09-26
var d = new Date(); 
// 获取年,getFullYear()返回4位的数字
var year = d.getFullYear();
// 获取月,月份比较特殊,0是1月,11是12月
var month = d.getMonth() + 1;
// 变成两位
month = month 3c042d0e6e5459de3fc2dcef52724b93b6c5a531a458a2e790c1fd6421739d1c{$id}b90dd5946f0946207856a8a37f441edfb6c5a531a458a2e790c1fd6421739d1c{$name}b90dd5946f0946207856a8a37f441edffd273fcf5bcad3dfdad3c41bd81ad3e5”中的{$id}替换成10,{$name}替换成Tony (使用正则表达式)
答案:"a34de1251f0d9fe1e645927f19a896e8b6c5a531a458a2e790c1fd6421739d1c{$id}b90dd5946f0946207856a8a37f441edfb6c5a531a458a2e790c1fd6421739d1c{$id}_{$name}b90dd5946f0946207856a8a37f441edffd273fcf5bcad3dfdad3c41bd81ad3e5".replace(/{\$id}/g, '10').replace(/{\$name}/g, 'Tony');

31.为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数escapeHtml,将95ec6993dc754240360e28e0de8de30a, &, “进行转义

function escapeHtml(str) { 
return str.replace(/[<>”&]/g, function(match) {
    switch (match) {
                   case “<”:
                      return “<”;
                   case “>”:
                      return “>”;
                   case “&”:
                      return “&”;
                   case “\””:
                      return “"”;
      }
  });
}

32.foo = foo||bar ,这行代码是什么意思?为什么要这样写?
答案:if(!foo) foo = bar; //如果foo存在,值不变,否则把bar的值赋给foo。
短路表达式:作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。

33.看下列代码,将会输出什么?(变量声明提升)

var foo = 1; 
(function(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
})()
答案:输出undefined 和 2。上面代码相当于:
var foo = 1;
(function(){
    var foo;
    console.log(foo); //undefined
    foo = 2;
    console.log(foo); // 2; 
  })()

函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部,但是只提升名称不会提升赋值部分。

34.用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。

function randomNub(aArray, len, min, max) {
  if (len >= (max - min)) {
  return &#39;超过&#39; + min + &#39;-&#39; + max + &#39;之间的个数范围&#39; + (max - min - 1) + &#39;个的总数&#39;;
  }
  if (aArray.length >= len) {
  aArray.sort(function(a, b) {
  return a - b
  });
  return aArray;
  }
  var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
  for (var j = 0; j < aArray.length; j++) {
  if (nowNub == aArray[j]) {
  randomNub(aArray, len, min, max);
  return;
  }
  }
  aArray.push(nowNub);
  randomNub(aArray, len, min, max);
  return aArray;
  }
  var arr=[];
  randomNub(arr,10,10,100);

35.把两个数组合并,并删除第二个元素。

var array1 = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;];
var bArray = [&#39;d&#39;,&#39;e&#39;,&#39;f&#39;];
var cArray = array1.concat(bArray);
cArray.splice(1,1);

36.怎样添加、移除、移动、复制、创建和查找节点(原生JS,实在基础,没细写每一步)
1)创建新节点

createDocumentFragment()    //创建一个DOM片段
createElement()   //创建一个具体的元素
createTextNode()   //创建一个文本节点

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

appendChild()      //添加
removeChild()      //移除
replaceChild()      //替换
insertBefore()      //插入

3)查找

getElementsByTagName()    //通过标签名称
getElementsByName()     //通过元素的Name属性的值
getElementById()        //通过元素Id,唯一性

37.有这样一个URL:,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。
答案: 

function serilizeUrl(url) { 
var urlObject = {}; 
if (/\?/.test(url)) { 
var urlString = url.substring(url.indexOf("?") + 1); 
var urlArray = urlString.split("&"); 
for (var i = 0, len = urlArray.length; i < len; i++) { 
var urlItem = urlArray[i]; 
var item = urlItem.split("="); 
urlObject[item[0]] = item[1]; 
} 
return urlObject; 
} 
return null; }

38.正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不同?匹配邮箱的正则表达式?
答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即\”表示”),并且还需要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。 
邮箱的正则匹配:

var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

39.看下面代码,给出输出结果。

for(var i=1;i<=3;i++){ 
  setTimeout(function(){
      console.log(i);  
    },0); 
};

答案:4 4 4。

原因:Javascript事件处理器在线程空闲之前不会运行。追问,如何让上述代码输出1 2 3?

for(var i=1;i<=3;i++){
   setTimeout((function(a){  //改成立即执行函数
       console.log(a);   
   })(i),0); 
};

40.写一个function,清除字符串前后的空格。(兼容所有浏览器)
使用自带接口trim(),考虑兼容性: 

if (!String.prototype.trim) {
 String.prototype.trim = function() {
 return this.replace(/^\s+/, "").replace(/\s+$/,"");
 }
}
  // test the function
var str = " \t\n test string ".trim();
alert(str == "test string"); // alerts "true"

Das obige ist der detaillierte Inhalt vonJS-Interviewfragen (Muss für Interviews gelesen werden). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn