React Native面試題記錄


一.ES6中增加了那些新的功能?

1> for-of循環:

使用 for-of 的時候,循環的是數組內部的元素且不會出現 for-in 中將附加屬性也遍歷的情況,其次,循環變量的類型和其在數組中的類型保持一致,而不是全部是 string 的情況。

var arrObj = ['alexchen',1,{}];
arrObj._name = 'attr-alexchen';
for (var i of arrObj) {
console.log(i);//這里只會輸出,alexchen,1,object{},不會輸出attr-alexchen
console.log(typeof(i))//這里會輸出 string,number,object
if (i == 1) {
break;
}
console.log(i)//只會輸出 alexchen,滿足條件之后就不在繼續循環,提高了效率並且可以自由控制跳出循環或繼續循環
}

2>模版字符串:

(function sayHello(name, words) { 
    console.log(`hello: ${name},welcome es6,your words is: ${words}`); //
})('alexchen','im admin')//運行之后將會輸出:hello: alexchen,welcome es6,your words is: im admin

模版字符串不會轉義特殊字符,因此需要自己處理其中的安全隱患。模版字符串並不能夠代替模版框架,原因是模版字符串沒有內置的循環語法和條件語句。因此,對於常規的普通的字符串拼接,我們可以使用它來完成,會讓你的代碼看起來更酷一點.

3>默認參數:

可以給參數設置默認值,而不用在函數內部去判斷后賦默認值,不但可以賦值默認值,還可以使用運算表達式.

(function testDefaultsParams(pars1 = "alexchen",
pars2 = (pars1 == "alexchen") ? "admin" : "not admin") {
console.log(`welcome ${pars1} ,u r ${pars2}!!`)//用到了上面說的模版字符串
})();
/**參數為空時輸出,welcome alexchen ,u r admin!!,
如果第一個參數不是alexchen則輸出,welcome alexchen ,u r not admin!!**/

4>箭頭操作符:

簡化了函數的書寫。操作符左邊為輸入的參數,而右邊則是進行的操作以及返回的值Inputs=>outputs。

我們知道在JS中回調是經常的事,而一般回調又以匿名函數的形式出現,每次都需要寫一個function,甚是繁瑣。當引入箭頭操作符后可以方便地寫回調了。

var array = [1, 2, 3];
//傳統寫法
array.forEach(function(v, i, a) {
    console.log(v);
});
//ES6
array.forEach(v = > console.log(v));

5>類的支持:

ES6中添加了對類的支持,引入了class關鍵字(其實class在javascript中一直是保留字,目的就是考慮到可能在以后的新版本中會用到,現在終於派上用場了)。JS本身就是面向對象的,ES6中提供的類實際上只是JS原型模式的包裝。現在提供原生的class支持后,對象的創建,繼承更加直觀了,並且父類方法的調用,實例化,靜態方法和構造函數等概念都更加形象化。

//類的定義
class Animal {
    //ES6中新型構造器
    constructor(name) {
        this.name = name;
    }
    //實例方法
    sayName() {
        console.log('My name is '+this.name);
    }
}
//類的繼承
class Programmer extends Animal {
    constructor(name) {
        //直接調用父類構造器進行初始化
        super(name);
    }
    program() {
        console.log("I'm coding...");
    }
}
//測試我們的類
var animal=new Animal('dummy'),
wayou=new Programmer('wayou');
animal.sayName();//輸出 ‘My name is dummy’
wayou.sayName();//輸出 ‘My name is wayou’
wayou.program();//輸出 ‘I'm coding...’

6>解構:

自動解析數組或對象中的值。比如若一個函數要返回多個值,常規的做法是返回一個對象,將每個值做為這個對象的屬性返回。但在ES6中,利用解構這一特性,可以直接返回一個數組,然后數組中的值會自動被解析到對應接收該值的變量中。

var [x,y]=getVal(),//函數返回值的解構
    [name,,age]=['wayou','male','secrect'];//數組解構

function getVal() {
    return [ 1, 2 ];
}

console.log('x:'+x+', y:'+y);//輸出:x:1, y:2 
console.log('name:'+name+', age:'+age);//輸出: name:wayou, age:secrect 

7>不定參數:

不定參數是在函數中使用命名參數同時接收不定數量的未命名參數。這只是一種語法糖,在以前的JavaScript代碼中我們可以通過arguments變量來達到這一目的。不定參數的格式是三個句點后跟代表所有不定參數的變量名。比如下面這個例子中,…x代表了所有傳入add函數的參數。

//將所有參數相加的函數
function add(...x){
    return x.reduce((m,n)=>m+n);
}
//傳遞任意個數的參數
console.log(add(1,2,3));//輸出:6
console.log(add(1,2,3,4,5));//輸出:15

8>let與const 關鍵字:

可以把let看成var,只是它定義的變量被限定在了特定范圍內才能使用,而離開這個范圍則無效。const則很直觀,用來定義常量,即無法被更改值的變量。

9>Promises:

Promises是處理異步操作的一種模式,之前在很多三方庫中有實現,比如jQuerydeferred 對象。當你發起一個異步請求,並綁定了.when(), .done()等事件處理程序時,其實就是在應用promise模式。

//創建promise
var promise = new Promise(function(resolve, reject) {
    // 進行一些異步或耗時操作
    if ( /*如果成功 */ ) {
        resolve("Stuff worked!");
    } else {
        reject(Error("It broke"));
    }
});
//綁定處理程序
promise.then(function(result) {
    //promise成功的話會執行這里
    console.log(result); // "Stuff worked!"
}, function(err) {
    //promise失敗會執行這里
    console.log(err); // Error: "It broke"
});

還有很多很多,這里只記錄和總結常見常用的......

二.fetch和ajax的區別:

Ajax的本質是使用XMLHttpRequest對象來請求數據;

fetch 是全局量 window 的一個方法,用於發送請求的API,

它的主要特點有:
1、第一個參數是URL:
2、第二個是可選參數,可以控制不同配置的 init 對象
3、使用了 JavaScript Promises 來處理結果/回調

三.Redux的核心概念:

http://www.jianshu.com/p/3334467e4b32

四.props和state的區別:

props: 一般用於父組件向子組件通信,在組件之間通信使用。
state: 一般用於組件內部的狀態維護,更新組建內部的數據,狀態,更新子組件的props等。

 

未完待續......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM