#push()の戻り値
配列の末尾に要素を追加することができるpush()
ですが、MDNによると、戻り値として返すのは要素を追加した後の新しい配列ではなく、新しい配列の要素数を返します。
新しい配列を返すと思っていたので、下記のような処理を行おうとした際にハマってしまいました。。。
confirmPushedArrayLength.js
let students = ['sato', 'suzuki', 'takahashi', 'tanaka', 'ito'];
//studentsに"watanabe"を追加して、追加後の要素数を取得したい。
let studentsCount = students.push("watanabe").length;
console.log(studentsCount); //undefined 取得失敗。
studentus.push("watanabe")
の戻り値が"watanabe"
追加後のstudents
の要素数6
であるため、.length
がArray.length
へのアクセスとならず、存在しないプロパティlength
にアクセスすることになり、undefined
を戻り値として返します。
confirmPushReturnValue.js
let students = ['sato', 'suzuki', 'takahashi', 'tanaka', 'ito'];
console.log(students.push("watanabe")); //6 戻り値は"watanabe"追加後のstudentsの要素数。
map()
やfilter()
はコールバック関数による処理後の新しい配列を戻り値として返してくれるなど、JavaScriptのArray.prototype
の各メソッドの戻り値は当然ながらそれぞれ違うので、思い込みで戻り値を推定しないように気を付けたいですね!