Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #23063
| Message-ID | <1991992.lvnxbIPBPy@PointedEars.de> (permalink) |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Organization | PointedEars Software (PES) |
| Date | 2014-02-11 13:39 +0100 |
| Subject | Re: Trying to view the properties of an object |
| Newsgroups | comp.lang.javascript |
| References | <properties-20140211082627@ram.dialup.fu-berlin.de> |
Stefan Ram wrote:
[Citation needed]
> I am trying to view the properties of a prototype. They say
> in JavaScript everything is an object.
Dump “them”, then. You should know better than to rely blindly on such
unfounded statements.
ECMAScript implementations like JavaScript do have primitive data types [1].
> Therefore, I assume that a prototype is an object too.
Ex falso quodlibet; however, a (working) prototype must be an object, or
null, for other reasons [2].
> I started with typing this into the Firefox Web console:
>
> 0 . __proto__ . __proto__
__proto__ is a proprietary property. The standards-compliant way to
determine the prototype of an object is Object.getPrototypeOf(o). [3] Which
would have shown you that there are primitive data types, and that the
statement “in JavaScript everything is an object” is provably false:
| >> Object.getPrototypeOf(0)
| TypeError: 0 is not an object
> . It gave me:
>
> [object Object]
>
> . I assumed that this was an object (»everything is an
> object«), and so I wanted to list all its properties,
> but the following loop did not produce any output:
>
> for( var i in 0 . __proto__ . __proto__ )console.log( i );
Not all properties are enumerable (have the [[Enumerable]] attribute set per
ES 5.x, or do not have the [[DontEnum]] attribute set per ES 1 through 3
Final). [6][7][8]
A for-in statement iterates only over the enumerable properties of an object
*and* over the enumerable properties it inherits from its prototype, in
arbitrary order. [9]
> . The next attempt, to my surprise, printed the numbers
> from 0 to 13:
You want to reconsider your learning technique as well.
> for( var i in Object.getOwnPropertyNames( 0 . __proto__ . __proto__ ))
> console.log( i );
>
> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10
> 11
> 12
> 13
Object.getOwnPropertyNames() returns a reference to an Array instance
representing an array of primitive string values, whereas each string value
is the name of a property that the object does not inherit from its
prototype. [10]
The names of the own *enumerable* properties of an Array instance include
the array indexes. [11] (However, because implementations may differ and
order is not guaranteed with for-in, you SHOULD NOT iterate over an Array in
*this* way.)
> . What I actually wanted to see was a list of all the
> well-known object prototype properties (functions) such as
>
> hasOwnProperty
> isPrototypeOf
> propertyIsEnumerable
> toLocaleString
> toSource
> toString
> unwatch
> valueOf
> watch
>
> .
Skip for-in, then.
BTW, your peculiar posting style is _not_ appreciated. [12]
__________
[1] <http://ecma-international.org/ecma-262/5.1/#sec-8>
[2] <http://ecma-international.org/ecma-262/5.1/#sec-8.6.2>
[3] <http://ecma-international.org/ecma-262/5.1/#sec-15.2.3.2>
[6] <http://ecma-international.org/ecma-262/5.1/#sec-8.6.1>
[7] <http://ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,
%203rd%20edition,%20December%201999.pdf>
[8] Ecma Interntional (2000). ECMAScript Language Specification. Edition 3
Final. <http://www.mozilla.org/js/language/E262-3.pdf> (retrieved
2002-07-22).
[9] <http://ecma-international.org/ecma-262/5.1/#sec-12.6.4>
[10] <http://ecma-international.org/ecma-262/5.1/#sec-15.2.3.4>
[11] <http://ecma-international.org/ecma-262/5.1/#sec-8.12.5>
[12] <http://PointedEars.de/faq#posting>
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next | Find similar | Unroll thread
Re: Trying to view the properties of an object Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-11 13:39 +0100
csiph-web