0

JavaScript がプリミティブとオブジェクトの間を容易に強制する場合、プロパティを追加すると undefined になるのはなぜですか??

var a = "abc";
var b = a.length
console.log(b)//outputs 3

強制により、プリミティブに値を割り当てることができますか?そうでない場合、その理由は?

4

2 に答える 2

1

強制によってプリミティブに値を割り当てることはできますか?

はい。プリミティブはオブジェクトにラップされ、その上にプロパティが作成されます。例外はスローされません。

プロパティを追加すると未定義になるのはなぜですか?

加算自体が値になります。

var str = "abc";
console.log(str.someProperty = 5); // 5

それでも、あなたが求めているのは、プリミティブからプロパティを取得することです。undefinedプリミティブが新しい​​ラッパー オブジェクトにラップされているため、これは返されます。これは、プロパティを割り当てたものではありません。

console.log(str.someProperty); // undefined

オブジェクトで作成されたような特別なプロパティ、またはメソッド.lengthなどの継承されたプロパティに対してのみ機能します(それらについてはドキュメントを参照してください)。slicecharAt

そのようなことが必要な場合は、ラッパー オブジェクトを明示的に作成し、どこかに保存する必要があります。

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"
于 2013-07-18T15:31:16.043 に答える