前端面试题 -- JS篇

范例

1.js中有哪些数据范例,并诠释清晰原始数据范例和援用数据范例

js中共有null,undefined, string,number,boolean,object六种数据范例。

原始数据范例: null,undefined, string,number,boolean

援用数据范例:object

二者的区分
1)值存储体式格局差别:

原始数据范例:将变量名和值都存储在栈内存中

援用数据范例:将变量名存储在栈内存中,将值存储在堆内存中,并在栈内存中存储值的地点,该地点指向堆内存中的值。
《前端面试题 -- JS篇》

2)赋值体式格局差别:

当给b给予另一个a的值
若a值为原始数据范例,直接在栈内存中天生b值,两个变量今后举行值转变不会相互影响

若a值为援用数据范例,给予b变量的是值地点,经由过程这个地点,二者指向的实际上是堆内存中的同一个值,所以今后a,b任一变量对值举行转变,会直接影响另一个变量的值
《前端面试题 -- JS篇》

2. 诠释清晰 null 和 undefined

null示意一个标识被赋值了,且该标识赋值为“空值”,从逻辑角度来看,null值示意空对象指针;

undefined示意声清楚明了标识,但没有给标识赋值。

3. 怎样复制一个对象的值?

      function cloneObject(object){
         var newObject = new Object();
         for(var i in object){
             newObject[i] = object[i];
         }
         return newObject;
      }

4. js在什么时候会举行隐式范例转换,转换的结果?

  • 数值运算

  • if

  • .挪用要领或属性

  • !和!!

5. 范例辨认的要领?

typeof a

  • 能够鉴别规范范例,除了null以外
    typeof 1 返回结果:”number” typeof {} 返回结果:”object”

  • 不能鉴别详细的对象范例,除了function以外
    typeof [1] 返回结果:”object” typeof function(){} 返回结果:”function”

a instanceof b

  • 能够鉴别内置对象范例
    [] instanceof Array 返回结果:true new String() instanceof String 返回结果:true

  • 不能鉴别原始范例值
    'a' instanceof String 返回结果:false

  • 能够鉴别自定义对象范例

     function Point(x,y){
             this.x = x;
             this.y = y
         }
    
     var c = new Point(1,2)
     c instanceof Point

    返回结果:true

a.constructor

  • 能够鉴别规范数据范例(undefined和null除外)
    '123'.constructor == String 返回结果:true

  • 能够鉴别详细的内置对象范例
    [1,2].constructor == Array 返回结果:true

  • 能够鉴别自定义对象范例

     function Point(x,y){
         this.x = x;
         this.y = y
     }
    
     var c = new Point(1,2)
     c.constructor == Point

    返回结果:true

Object.prototype.toString.call(a)

  • 能够鉴别规范数据范例
    Object.prototype.toString.call(1)返回结果:”[object Number]” Object.prototype.toString.call(undefined) 返回结果:”[object Undefined]”

  • 能够鉴别内置对象范例
    Object.prototype.toString.call([a]) 返回结果:”[object Array]”

  • 不能鉴别自定义对象范例

  function Point(x,y){
      this.x = x;
      this.y = y
  }
  var c = new Point(1,2)
  Object.prototype.toString.call(c)

返回结果:”[object Object]”

工作中能够写一个函数轻易剖断

      function type(obj){
          return Object.prototype.toString.call(obj).slice(8,-1)
      }

type('a') 返回结果: “String” type([a]) 返回结果: “Array”

函数

1. 函数里的this什么寄义,什么情况下,怎样用?
谁挪用的要领或许属性,this就指向谁
假如没有被谁挪用,this指向window

2. bind,call,apply要领的运用,什么区分?什么时候用?

3. 函数curry化
函数curry化是什么意义?
把吸收多个参数的函数转换为吸收单一参数的函数,且函数能够延续吸收参数
将一个庞杂的题目片断化,使之举行简化

3. 数组和对象有哪些原生要领,枚举一下,离别是什么寄义,比方链接两个数组用哪一个要领,删除数组的指定项。

原型

1. 讲一下 prototype 是什么东西,原型链的明白,什么时候用 prototype?

proto

组织函数

闭包

1.什么是闭包?
2.闭包的作用和运用场景
闭包的作用一:隐蔽、封装
闭包的作用二:影象函数

变量作用域

ajax

1.解说原生Js完成ajax的道理。

  Ajax 的全称是Asynchronous JavaScript and XML,个中,Asynchronous 是异步的意义,它有别于传统web开辟中采纳的同步的体式格局。

  Ajax的道理简朴来讲经由过程XmlHttpRequest对象来向服务器发异步要求,从服务器取得数据,然后用javascript来操纵DOM而更新页面。

  XMLHttpRequest是ajax的中心机制,它是在IE5中起首引入的,是一种支撑异步要求的手艺。简朴的说,也就是javascript能够实时向服务器提出要乞降处置惩罚相应,而不壅塞用户。到达无革新的结果。

  XMLHttpRequest这个对象的属性有:

onreadystatechange 每次状况转变所触发事宜的事宜处置惩罚顺序。
responseText 从服务器历程返回数据的字符串情势。
responseXML 从服务器历程返回的DOM兼容的文档数据对象。
status 从服务器返回的数字代码,比方罕见的404(未找到)和200(已停当)
status Text 陪伴状况码的字符串信息
readyState 对象状况值
0 (未初始化) 对象已竖立,然则还没有初始化(还没有挪用open要领)
1 (初始化) 对象已竖立,还没有挪用send要领

2 (发送数据) send要领已挪用,然则当前的状况及http头未知

3 (数据传送中) 已吸收部份数据,由于相应及http头不全,这时候经由过程responseBody和responseText猎取部份数据会涌现毛病,

4 (完成) 数据吸收终了,此时能够经由过程经由过程responseXml和responseText猎取完全的回应数据

正则表达式

Coding Questions

  1. Question: How would you make this work?

add(2, 5); // 7
add(2)(5); // 7
function addto(){
    var length = arguments.length;
    var sum = 0;
    for(var i = 0;i<length;i++){
        sum += arguments[i]
    }
    return sum;
}

function add(){
    var value = addto.apply(add,arguments);
    var helper = function(next){
        typeof next == "number" ? value+=next:value;
        return helper
    }
    helper.valueOf = function(){
        return value;
    }
    return helper;
}
  1. Make this work: duplicate([1,2,3,4,5]); // [1,2,3,4,5,1,2,3,4,5]

     function duplicate(arr){
         var length = arr.length;
         for(var i=0;i<length;i++)
         arr.push(arr[i])
         return arr;
     }

3.怎样猎取一个大于即是0且小于即是9的随机整数?.

     function randomNum(){
         return Math.floor(Math.random()*10)
     }

4.想要去除一个字符串的第一个字符,有哪些要领能够完成.

     str.slice(1)
     str.substr(1)
     str.substring(1)
     str.replace(/./,'')
     str.replace(str.charAt(0),'')

5.对一个数组(每项都是数值)乞降,有哪些要领?
6.If you have var y = 1, x = y = typeof x; What is the value of x?
Answer: “undefined”

    原文作者:ofey
    原文地址: https://segmentfault.com/a/1190000005119083
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞