2011-12-19 38 views

Trả lời

6

Đó là vì '' là một chuỗi chữ, không phải là một thể hiện của các "lớp" String. Vì các thuộc tính như match được khai báo trên String.prototype, bạn sẽ không thấy chúng khi sử dụng chuỗi ký tự. Nếu bạn sử dụng các nhà điều hành new bạn sẽ thấy những gì bạn mong đợi:

var s = new String("hello"); 
console.dir(s); 

Dưới đây là một ảnh chụp màn hình từ các công cụ nhà phát triển Chrome (chú ý sự cần thiết phải mở rộng prototype, như phương pháp mà bạn đang mong đợi để xem được khai báo trên nguyên mẫu , không phải là đối tượng String tự):

enter image description here

+0

Hấp dẫn, kết quả của Firebug khá khác biệt. – lonesomeday

+0

Hmm. Firebug dường như liệt kê các phương thức hai lần. Một lần cho chính đối tượng đó và một lần nữa cho 'prototype'. Nó cũng có vẻ bỏ qua thuộc tính 'length'. –

+0

Tôi vẫn còn phần nào không thuyết phục ở đây. Tại sao ''' .match',' '' .constructor', v.v. không in 'undefined', và' dir ('') 'không in chúng? – Randomblue

2

Có thể cùng một lý do khiến console.dir (true) và console.dir (1234) nói rằng khi bạn vặn núm chỉ xuống dữ liệu. Có khả năng mã chỉ lặp qua các thuộc tính nếu nó là một đối tượng. Tại sao núm xoay đầu vẫn còn ở đó là không rõ ràng.

+1

'Chuỗi' là các đối tượng,' Mảng' là các đối tượng, đối với 'Hàm', nó sẽ liệt kê' nguyên mẫu', rất đặc biệt. Có lẽ chỉ là một số phép thuật 'console.dir'? 'console.log' cũng khá kỳ diệu (như trên DOMElements). Đặc tả của Firefox rất không hữu ích. – Halcyon

+0

"" instanceof Chuỗi – peller

+0

Hmmm .. '" "instanceof String' là' false' .. TẠI SAO !? 'typeof" "' trả về '" chuỗi "' mặc dù. Tôi cho rằng điều này chỉ có thể được giải thích nếu '" "' có một hàm tạo không phải là 'Chuỗi', mặc dù bạn mong đợi nó. – Halcyon

0

Trong JavaScript đối tượng String chung có các phương thức được xác định trước bằng ngôn ngữ. Các chuỗi ký tự chuỗi thực tế kế thừa các phương thức của đối tượng String toàn cục, nhưng không có thuộc tính nào ngoại trừ "độ dài".

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String

+0

Hum. Vậy tại sao không phải là '' '.length' được in? – Randomblue

+0

Tôi chưa bao giờ sử dụng console.dir. Tôi đã luôn luôn sử dụng console.log. ''' .length === 0' – austincheney

+0

không chính xác. Tiếp tục đọc thêm về sự khác biệt giữa các chuỗi ký tự và các đối tượng – peller

Các vấn đề liên quan