변수에 할당 할 수있는 데이터는 유행과 같이 개체에서 액세스 할 수있는 속성 (따라서 메서드)을 가지고 있다는 것을 의미합니다.
// strings
"asdf".length; // 4
"asdf".replace('f', 'zxc'); // "azxc"
// numbers
(10).toFixed(2); // "10.00"
// booleans
true.someProp; // undefined (point is it doesn't crash)
이들은 상속받은 프로토 타입을 가지고 있습니다.
"omg".constructor; // function String() { [native code] }
String.prototype.snazzify = function() {
return "*!*!*" + this + "*!*!*";
};
"omg".snazzify(); // "*!*!*omg*!*!*"
그러나, 이러한 기본 요소이며, 그들은 많은 방법처럼 객체를 작동하는 동안, 그들은 몇 가지 다른 "진짜"JS 객체 다릅니다. 그 중 가장 큰 것은 불변이라는 것이다. 기능 실제 변경 가능한 객체가 있다고하지만
var s = "qwerty";
s.foo; // undefined, but does not crash
s.foo = 'some val'; // try to add a property to the string
s.foo; // still undefined, you cannot modify a primitive
주의 마십시오.
var fn = function(){};
fn.foo; // undefined
fn.foo = 'some val'; // try to add a property to the function
fn.foo; // "some val"
그래서 "JS의 모든 개체는"것을 기술적으로 사실이 아니다 동안, 대부분의 경우 당신은 대부분 그들이 속성과 메소드를 가지고 있다는 점에서 객체처럼 취급 할 수 있으며, 잠재적으로 확장 할 수 있습니다. 주의 사항을 이해했는지 확인하십시오.
JavaScript의 모든 것이 객체라는 것은 사실이 아닙니다. – Pointy
많은 OOP에서 대부분의 것들이 어떤 형태로'Object'를 확장합니다. – Rogue
속성과 같은 객체를 가질 수있는 더 많은 것들 (http://stackoverflow.com/a/6394872/16959)은 객체처럼 취급 할 수 있다는 것을 의미하지 않아야합니다. –