# 前端面試考題 #### 1. 請解釋 Angular 的 Route Guard 及 Route Resolver 的功能,及你曾在什麼場景使用過,或是舉幾個例子。 #### 2. 下列程式碼執行後 console 會出現什麼? ```javascript= (function() { interval(1000).pipe( switchMap(() => timer(0, 1000)) ).subscribe(data => { console.log(data); }); })() // A: 每秒印出一個 0 ``` ```javascript= (function() { interval(3000).pipe( concatMap(() => timer(0, 1000)) ).subscribe(data => { console.log(data); }); })() // A: 每秒依序印出 0 1 2 3 .... ``` #### 3. 請優化下列程式碼 ```javascript= this.userLoginCheck(accountCode).subscribe(data => { const name = data.name; const age = data.age; this.userAuthorization(name, age).subscribe(passed => { if (passed) { this._router.navigateByUrl('/main'); } else { this._router.navigateByUrl('/login'); } }) }) ``` A: (開放性問題,沒有標準答案) ```javascript= this.userLoginCheck(accountCode).pipe( mergeMap(({name, age}) => this.userAuthorization(name, age)) ).subscribe(passed => { const url = passed ? '/main' : '/login'; this._router.navigateByUrl(url); }) ``` #### 4. 下列 angular 元件,畫面上會出現什麼? ```javascript= @Component({ selector: 'my-app', template: ` <div *ngFor="let item of list" *ngIf="item % 2 === 0"> {{item}} </div> `, }) export class App { list = [0, 1, 2, 3, 4, 5, 6, 7]; } ``` #### 5. 請實作下列函式 ```javascript= (function fn(list) { // do something }(['12','32','89','12','12','78','12','32'])); // 印出 12,32,89,78 ``` #### 6. 請試著解釋下列兩種 enum 的差異? ```typescript= enum Gender { Male, Female, Other } const enum Gender { Male, Female, Other } ``` #### 7. 下列 TypeScript 程式碼出了什麼問題?怎麼修正? ```typescript= interface RGB { red: number; green: number; blue: number; } interface HSV { hue: number; saturation: number; value: number; } function setColor(color: RGB | HSV) { console.log(color.hue); } ``` A: ![](https://i.imgur.com/wAvUP50.png) ```typescript= // 加上 type guard function setColor(color: RGB | HSV) { if ('hue' in color) { console.log(color.hue); } } ```