annotate source/objects.rst @ 213:0ea90a1819c2 default tip

Custom theming
author Radomir Dopieralski <radomir.dopieralski@allegro.pl>
date Wed, 27 Jun 2012 16:35:54 +0200
parents 4e6cfa066d1a
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
6 JavaScript object ``jso`` is to write:
1
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
50 Here's the corresponding Python session (with *sys.ps1='py> '*):
1
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
59 In the examples above ``'A'`` is the key and ``'apple'`` is the value.
12
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
91 What's going on here? Well, objects ``a`` and ``b`` are converted to
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
92 strings, and they have the same string representation, namely *'[object
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
93 Object]'*. (We'll see later how we can change this.) So let's try
12
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 ^^^^^^^^^^^^
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
137 The notation ``a[b]`` is called **indexing**. In Python, indexing with
1
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
177 where respectively ``obj_a.method`` and ``obj_name`` are undefined.
64
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
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
211
4e6cfa066d1a Use double backticks for inline code everywhere
Radomir Dopieralski <radomir.dopieralski@allegro.pl>
parents: 94
diff changeset
212 In addition, when ``a.b`` is a function then
12
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.