JS基礎知識

類型

1.js中有哪些數據類型,並解釋清楚原始數據類型和引用數據類型

js中共有null,undefined, string,number,boolean,object六種數據類型。

原始數據類型: null,undefined, string,number,boolean

引用數據類型:object

兩者的區別
1)值存儲方式不同:

原始數據類型:將變量名和值都存儲在棧內存中

引用數據類型:將變量名存儲在棧內存中,將值存儲在堆內存中,並在棧內存中存儲值的地址,該地址指向堆內存中的值。

2)賦值方式不同:

當給b賦予另一個a的值
若a值爲原始數據類型,直接在棧內存中生成b值,兩個變量以後進行值改變不會相互影響

若a值爲引用數據類型,賦予b變量的是值地址,通過這個地址,兩者指向的其實是堆內存中的同一個值,所以以後a,b任一變量對值進行改變,會直接影響另一個變量的值

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"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章