---
# System prepended metadata

title: 前端面試考題

---

# 前端面試考題

 #### 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);
    }
}
```