JavaScript がプリミティブとオブジェクトの間を容易に強制する場合、プロパティを追加すると undefined になるのはなぜですか??
var a = "abc";
var b = a.length
console.log(b)//outputs 3
強制により、プリミティブに値を割り当てることができますか?そうでない場合、その理由は?
JavaScript がプリミティブとオブジェクトの間を容易に強制する場合、プロパティを追加すると undefined になるのはなぜですか??
var a = "abc";
var b = a.length
console.log(b)//outputs 3
強制により、プリミティブに値を割り当てることができますか?そうでない場合、その理由は?
強制によってプリミティブに値を割り当てることはできますか?
はい。プリミティブはオブジェクトにラップされ、その上にプロパティが作成されます。例外はスローされません。
プロパティを追加すると未定義になるのはなぜですか?
加算自体が値になります。
var str = "abc";
console.log(str.someProperty = 5); // 5
それでも、あなたが求めているのは、プリミティブからプロパティを取得することです。undefined
プリミティブが新しいラッパー オブジェクトにラップされているため、これは返されます。これは、プロパティを割り当てたものではありません。
console.log(str.someProperty); // undefined
オブジェクトで作成されたような特別なプロパティ、またはメソッド.length
などの継承されたプロパティに対してのみ機能します(それらについてはドキュメントを参照してください)。slice
charAt
そのようなことが必要な場合は、ラッパー オブジェクトを明示的に作成し、どこかに保存する必要があります。
var strObj = new String("abc");
strObj.someProperty = 5;
console.log(strObj.someProperty); // 5
// coercion and the `toString` method will even make the object act like a string
console.log(strObj + "def"); // "abcdef"