特別演習21

目次

1. 多肢選択問題

    1. 以下の論理式の結果は false ()

    2. 以下のJSコードの出力結果はどうなるでしょうか?

    3. 次のオブジェクトのうち、Javascript 組み込みの反復可能オブジェクトはどれですか?

2. プログラミングに関する質問

    1. 配列パラメータの最大値を見つけて返します。注: 配列には数値のみが含まれます


1. 多肢選択問題

1. 以下の論理式の結果は false ()

あ、NaN == NaN

B、null == 未定義

C、'' == 0

D、真 == 1

正解:A

解析:

(1) オプションの説明

選択肢 A: NaN は、それ自体を含め、誰と比較してもfalseです。2 つの NaN が等しいと判断するには、Object.is(NaN,NaN)を使用します。

オプション B: null と unknown を比較すると、結果は trueになります。それ以外の場合は、unknown と null が誰と比較され、結果は falseになります。

C オプション: String と Number を比較し、最初にString をNumber型に変換し次に比較します。 Number 型の文字列に変換した結果は 0==0 で、結果はtrueです

Dオプション:Booleanと他の型を比較し、まずBooleanを Number型に変換し、Number型に対するtrueの値が1なので、true==1の結果は trueとなります。

(2) 例

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true

2. 以下のJSコードの出力結果はどうなるでしょうか?
let obj = {
  num1: 117
}
let res = obj;
obj.child = obj = { num2: 935 };
var x = y = res.child.num2;
console.log(obj.child);
console.log(res.num1);
console.log(y);

A、117、117、未定義

B、117、117、935

C、未定義、117、935

D、未定義、117、未定義

正解:C あなたの答え:B

解析:

(1)obj = { num1: 117 } とします。  

obj をスタックに置き、{num1:117} をヒープに置き、obj がヒープ内の {num1:117} を指すようにします。

(2)res = obj とします。

res をスタックに置き、res をヒープ内の { num1:117 } にポイントします

(3) obj.child = obj = { num2: 935 }; 

① 重要: 代入操作では、最初に変数を定義し (左から右へ)、次に値を(右から左へ)割り当てます。

② 変数: obj.child を定義し、ヒープ内の {num1:117} に子属性を追加し、{num1:117, child:unknown} を取得します

③ 変数を定義します: obj、以前のスタック内の obj

変数を定義する

④ 代入: obj = { num2: 935 }、{ num2: 935 } をヒープに置き、スタック内の obj をヒープ内の { num2: 935 } にポイントします。 

obj は新しい値を割り当てます

⑤ 代入: obj.child = obj、ヒープ内の {num1:117, child:unknown} の子を {num2: 935} にポイントします。

obj.child が新しい値に割り当てられます

⑥まとめ

obj = { 数値2: 935 } 

res = { num1: 117,子:{ num2: 935 } }

(4)var x = y = res.child.num2;

(3)の①と同様に、最後の代入は右から左へ、y = res.child.num2 ie y = 935、x = y ie x = 935となります。


3. 次のオブジェクトのうち、Javascript 組み込みの反復可能オブジェクトはどれですか?

A、配列

B、地図

C、文字列

D、オブジェクト

正解:ABC あなたの答え:ABCD

解析:

(1) String、Array、TypedArray、Map、Set はすべて組み込みの反復可能オブジェクトです。これらのプロトタイプ オブジェクトにはすべて Symbol.iterator メソッドがあるためです。

(2) MDN参考資料

イテレータとジェネレータ - JavaScript | MDN


2. プログラミングに関する質問

1. 配列パラメータの最大値を見つけて返します。注: 配列には数値のみが含まれます

解析:

(1) Math.max()メソッドは最大値を見つけます。このメソッドはパラメータとして配列を受け入れることができないので、配列を分解するには分解して代入する必要があることに注意してください。

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        return Math.max(...array)
    }
    console.log(_max(array));
</script>

(2) for() は配列値を順番にループして最大値を見つけます

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        let max = array[0]
        for(let i =0;i<array.length;i++){
            if(max<array[i]){
                max = array[i]
            }
        }
        return max
    }
    console.log(_max(array));
</script>

(3) sort() メソッドは新しい配列を大きいものから小さいものにソートし、shift()はソートされた新しい配列の最初の値を返します。

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        const newArr = array
        newArr.sort((a,b)=>{
            return b-a
        })
        return newArr.shift()
    }
    console.log(_max(array));
</script>

(4) sort()メソッドは新しい配列を小さいものから大きいものへソートし、pop() は ソートされた新しい配列の最後の値を返します。

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        const newArr = array
        newArr.sort((a,b)=>{
            return a-b
        })
        return newArr.pop()
    }
    console.log(_max(array));
</script>

(5) reduce() メソッドは配列要素を走査し、最大値を返します。

<script>
    let array = [23,65,12,5,34]
    function _max(array){
        let max = array.reduce((max,cur)=>{
            return max>cur?max:cur
        })
        return max
    }
    console.log(_max(array));
</script>

おすすめ

転載: blog.csdn.net/qq_51478745/article/details/131581951