Nếu bạn nhìn vào đặc tả ECMAScript 3, bạn sẽ thấy rằng các kiểu giá trị nguyên thủy Null và Undefined không có các đối tượng Null và Undefined.Tại sao chữ số không có quyền truy cập vào các phương thức Số?
>> Null
ReferenceError: Null is not defined
Các loại giá trị nguyên thủy khác Số, chuỗi và loại Boolean có đi kèm với các đối tượng Số, Chuỗi và Boolean mà bạn có thể tham chiếu từ phạm vi toàn cục.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
Mục đích cho các kiểu giá trị nguyên thủy là cung cấp các phương pháp như toString
và valueOf
với nhiều loại giá trị nguyên thủy của mình:
>>var n = 1;
>>n.toString();
"1"
cũng giống như
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Booleans và các chuỗi cũng hoạt động theo cách đó:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
Bạn có thể thấy rằng các đối tượng giá trị nguyên thủy đang sử dụng các phương pháp của đối tượng đi kèm của họ khi bạn cố gắng kết hợp các loại:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Điều thú vị là đủ với nhiều loại đen boolean và chuỗi, bạn có thể gọi các phương pháp này trực tiếp từ các chữ:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
giá trị nguyên thủy null và undefined, vì họ không có kèm theo đối tượng Null và không xác định không thể làm những điều sau:
>>Null
ReferenceError: Null is not defined
>>null.toString()
TypeError: Cannot call method 'toString' of null
Số loại giá trị nguyên thủy hoạt động giống như kết hợp cả hai. Bạn có thể gọi toString
trên một chữ nếu bạn trực tiếp sử dụng phương pháp của Số đối tượng nguyên mẫu của:
>>Number.prototype.toString.call(1);
"1"
Nhưng bạn không thể truy cập vào phương pháp này từ nghĩa đen chính nó như bạn có thể với chuỗi và boolean:
>>1.toString()
SyntaxError: Unexpected token ILLEGAL
Tại sao nó có phải là số lượng literal hoạt động khác với boolean và string mặc dù có một đối tượng Number không?
xem thêm [Tại sao tôi không thể truy cập thuộc tính của một số nguyên bằng một dấu chấm?] (http://stackoverflow.com/q/9380077/1048572) – Bergi
Oh, điểm tốt. Không chắc lắm. Bài đăng khác đó có thông tin tốt. Cảm ơn! –