Mercurial > js4py-pl
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 |
| 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. |
