TypeScriptの配列インデックスにある"+"(プラス記号)は何を表す？


Angular(stable v8.2.9)のチュートリアル[入門 - ルーティング - ルーティング情報を使う -
セクション3](https://angular.jp/start/routing#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%83%85%E5%A0%B1%E3%82%92%E4%BD%BF%E3%81%86)をさらっています。下記のソースコードが載っているのですが、３行目の"+"はどういう意味があるのでしょうか。  
"+"を除いてもうまく動作しているように見えます。

[code]

    ngOnInit() {
      this.route.paramMap.subscribe(params => {
        this.product = products[+params.get('productId')];
      });
    }
    
[/code]

「配列、インデックス」に加えて、演算子、アノテーションなどで調べてみたのですがよくわからず…。"+"にはどういう効果・意味があるのか、お教えいただけませんでしょうか。




おそらくですが、number型へのcast(変換)です。

[code]

    // 文字列の前に + を付けるとnumber型が返る
    const str = '0';
    const num = +'0';
    
    console.log(str + 1);
    console.log(num + 1);
[/code]

例えば他にも以下のような方法があります。

JavaScriptにおける数値⇔文字列の型変換あれこれ - console.lealog();  
<https://lealog.hateblo.jp/entry/2013/02/28/005010>

>
[code]

>     var str = '123';
>  
>     +str; // 123
>     -(-str); // 123
>     ~~str; // 123
>     str&-1; // 123
>     str|0; // 123
>     str^0; // 123
>     str>>0; // 123
>     str<<0; // 123
>  
[/code]

余談ですが、ビット演算によるnumber型への変換の場合、結果が32bitの整数になることに注意してください。

[code]

    console.log(+'1.10');
    
    console.log(~~'1.10');
    console.log('1.10'&-1);
    console.log('1.10'|0);
    console.log('1.10'^0);
    
    console.log('1.10' >> 0);
    console.log('1.10' << 0);
    
    console.log('1.10' >>> 0);
[/code]

32bitの範囲を超える数値の場合、意図しない結果になります。

[code]

    console.log('2147483647' | 0);
    console.log('2147483648' | 0);
    
    console.log('2147483647' >> 0);
    console.log('2147483648' >> 0);
    
    console.log('4294967295' >>> 0);
    console.log('4294967296' >>> 0);
[/code]

ビット演算子 - JavaScript | MDN  
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators>




おそらくですが、number型へのcast(変換)です。

[code]

    // 文字列の前に + を付けるとnumber型が返る
    const str = '0';
    const num = +'0';
    
    console.log(str + 1);
    console.log(num + 1);
[/code]

例えば他にも以下のような方法があります。

JavaScriptにおける数値⇔文字列の型変換あれこれ - console.lealog();  
<https://lealog.hateblo.jp/entry/2013/02/28/005010>

>
[code]

>     var str = '123';
>  
>     +str; // 123
>     -(-str); // 123
>     ~~str; // 123
>     str&-1; // 123
>     str|0; // 123
>     str^0; // 123
>     str>>0; // 123
>     str<<0; // 123
>  
[/code]

余談ですが、ビット演算によるnumber型への変換の場合、結果が32bitの整数になることに注意してください。

[code]

    console.log(+'1.10');
    
    console.log(~~'1.10');
    console.log('1.10'&-1);
    console.log('1.10'|0);
    console.log('1.10'^0);
    
    console.log('1.10' >> 0);
    console.log('1.10' << 0);
    
    console.log('1.10' >>> 0);
[/code]

32bitの範囲を超える数値の場合、意図しない結果になります。

[code]

    console.log('2147483647' | 0);
    console.log('2147483648' | 0);
    
    console.log('2147483647' >> 0);
    console.log('2147483648' >> 0);
    
    console.log('4294967295' >>> 0);
    console.log('4294967296' >>> 0);
[/code]

ビット演算子 - JavaScript | MDN  
<https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators>

