annotate source/objects.rst @ 201:b6864a86e876 default tip

Przetłumaczone getting-started
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 15 Jul 2012 13:27:27 +0200
parents 454054afcc0a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
1 Objects
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
2 =======
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
3
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
4 JavaScript and Python have rather different object models and here we
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
5 give a broad view of the differences. The simplest way to create a
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
6 JavaScript object **jso** is to write:
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
7
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
8 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
9
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
10 jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
11
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
12
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
13 The closest builtin equivalent to jso in Python is the dictionary such
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
14 as **pyo**, which is created using:
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
15
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
16 .. code-block:: python
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
17
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
18 pyo = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
19
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
20
2
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
21 The two objects jso and pyo have important similarities and
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
22 differences (mostly differences).
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
23
94
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
24
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
25 Late news
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
26 ---------
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
27
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
28 Not incorporated in this document is a recent discovery, that
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
29
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
30 **JavaScript objects are like Python classes with custom item
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
31 methods (on the metaclass) that are never instantiated.**
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
32
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
33 I've put this material in a page on :doc:`javascript-objects`.
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
34
454054afcc0a $ cp -piv ../python-classes-tutorial/source/javascript-objects.rst source/ # and some other changes
Jonathan Fine <jfine@pytex.org>
parents: 64
diff changeset
35
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
36 Similarities
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
37 ------------
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
38
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
39 Both objects can be used to store data. Here's a lightly edited
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
40 command line session (using the SpiderMonkey JavaScript interpreter):
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
41
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
42 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
43
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
44 js> jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
45 js> jso['A'] = 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
46 js> jso['A']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
47 apple
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
48
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
49
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
50 Here's the corresponding Python session (with *sys.ps1 = 'py> '*):
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
51
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
52 .. code-block:: python
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
53
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
54 py> pyo = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
55 py> pyo['A'] = 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
56 py> pyo['A']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
57 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
58
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
59 In the examples above *A* is the **key** and **apple** is the value.
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
60 In both cases we are able to store values against keys. In both cases
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
61 the value can be any object. In most other respects, jso and pyo are
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
62 different.
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
63
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
64 Differences
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
65 -----------
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
66
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
67 Keys
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
68 ^^^^
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
69
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
70 In JavaScript all keys are converted to strings.
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
71
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
72 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
73
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
74 js> jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
75 js> jso['1'] = 'one'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
76 js> jso[1]
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
77 one
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
78
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
79 Here's an even more surprising example:
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
80
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
81 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
82
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
83 js> jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
84 js> a = {} ; b = {};
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
85 js> jso[a] = 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
86 apple
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
87 js> jso[b]
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
88 apple
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
89
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
90
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
91 What's going on here? Well, objects *a* and *b* are converted to
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
92 strings, and they have the same string representation, namely *[object
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
93 Object]*. (We'll see later how we can change this.) So let's try
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
94 this out (continuing the previous example):
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
95
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
96 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
97
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
98 js> jso['[object Object]']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
99 apple
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
100
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
101 Here, for comparison, is what happens with Python:
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
102
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
103 .. code-block:: python
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
104
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
105 py> pyo = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
106 py> pyo['1'] = 'one'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
107 py> pyo[1]
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
108 Traceback (most recent call last):
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
109 File "<stdin>", line 1, in <module>
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
110 KeyError: 1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
111 py> a = {}; b = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
112 py> pyo[a] = 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
113 Traceback (most recent call last):
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
114 File "<stdin>", line 1, in <module>
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
115 TypeError: unhashable type: 'dict'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
116
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
117
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
118
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
119 Here JavaScript, faced with input of the wrong type, has converted it
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
120 to the required type, which is a string.
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
121
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
122 .. note::
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
123
2
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
124 In JavaScript anything can be a key, and all keys are converted to
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
125 strings before lookup. In Python, keys are unchanged, and have to
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
126 be hashable.
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
127
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
128 .. note::
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
129
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
130 Python built-in objects throw an error when given incorrect input.
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
131 JavaScript converts the input to something that might work.
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
132
5
48d5ba601286 inheritance.rst: Finished, at least for this draft.
Jonathan Fine <jfine@pytex.org>
parents: 2
diff changeset
133 .. _object-missing-keys:
48d5ba601286 inheritance.rst: Finished, at least for this draft.
Jonathan Fine <jfine@pytex.org>
parents: 2
diff changeset
134
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
135 Missing keys
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
136 ^^^^^^^^^^^^
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
137 The notation *a[b]* is called **indexing**. In Python, indexing with
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
138 a key that is not present in the dictionary raises an exception.
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
139
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
140 .. code-block:: python
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
141
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
142 py> pyo = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
143 py> pyo['dne']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
144 Traceback (most recent call last):
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
145 File "<stdin>", line 1, in <module>
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
146 KeyError: 'dne'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
147
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
148
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
149 In JavaScript, we get *undefined*, which is a special JavaScript
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
150 object (which is diferent from the *null* JavaScript object).
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
151
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
152 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
153
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
154 js> jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
155 [object Object]
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
156 js> jso['dne']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
157 js> jso['dne'] === undefined
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
158 true
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
159
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
160 (SpiderMonkey does not echo *undefined* at the command prompt, just as
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
161 Python does not echo *None*. Therefore we use equality to show that
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
162 we truly get undefined.)
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
163
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
164 .. note::
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
165
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
166 In JavaScript you won't get a KeyError (or IndexError). Instead,
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
167 you get **undefined**.
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
168
64
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
169 In practice, JavaScript left to itself rarely throws an error. It
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
170 most commonly happens with code such as
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
171
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
172 .. code-block: javascript
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
173
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
174 obj_a.method(args)
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
175 obj_b.name
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
176
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
177 where respectively *obj_a.method* and *obj_name* are undefined.
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
178
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
179
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
180 Attributes
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
181 ^^^^^^^^^^
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
182
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
183 In JavaScript an object has a single set of properties, which can be
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
184 accessed both by indexing and as attributes. Here is an example:
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
185
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
186 .. code-block:: javascript
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
187
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
188 js> jso = {}
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
189 js> jso['a'] = 'apple'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
190 js> jso.a
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
191 apple
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
192 js> jso.b = 'banana'
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
193 banana
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
194 js> jso['b']
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
195 banana
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
196
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
197 In Python a dictionary has a set of key-value pairs and in addition it
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
198 has dictionary attributes, which are methods.
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
199
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
200
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
201 .. note::
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
202
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
203 In JavaScript the three statements below are completely equivalent
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
204 (except for assignment to *tmp* as a side effect).
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
205
2
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
206 .. code-block:: javascript
1
b375730398c8 Added objects.rst: basic differences between JavaScript and Python objects.
Jonathan Fine <jfine@pytex.org>
parents:
diff changeset
207
2
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
208 x = a.b
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
209 x = a['b']
69ad51d0e96c objects.rst: Minor improvements.
Jonathan Fine <jfine@pytex.org>
parents: 1
diff changeset
210 tmp = 'b'; x = a[tmp]
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
211
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
212 In addition, when *a.b* is a function then
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
213
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
214 .. code-block:: javascript
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
215
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
216 x = a.b(arg1, arg2, arg3)
64
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
217 tmp = 'b'; x = a[tmp](arg1, arg2, arg3)
12
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
218
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
219 are equivalent.
4be9f1bf2fd3 Reviewed and revised existing pages, and added some new stub pages.
Jonathan Fine <jfine@pytex.org>
parents: 5
diff changeset
220
64
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
221 But note also that
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
222
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
223 .. code-block:: javascript
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
224
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
225 x = a.b(arg1, arg2, arg3)
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
226 tmp = a.b; x = tmp(arg1, arg2, arg3
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
227
b8fe43ef6a32 objects.rst: Editorial revisions. Now good enough.
Jonathan Fine <jfine@pytex.org>
parents: 12
diff changeset
228 are sometimes completely different.