Ответ HYRY не будет работать над новыми версиями matplotlib (nxutils устарел). Я создал новую версию, которая работает:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.path import Path
import numpy as np
map = Basemap(projection='cyl', resolution='c')
lons = [0., 0., 16., 76.]
lats = [0., 41., 19., 51.]
x, y = map(lons, lats)
locations = np.c_[x, y]
polygons = [Path(p.boundary) for p in map.landpolygons]
result = np.zeros(len(locations), dtype=bool)
for polygon in polygons:
result += np.array(polygon.contains_points(locations))
print result
(источник из здесь .)
Обозначение квадратной скобки позволяет использовать символы, которые нельзя использовать с точечной нотацией:
blockquote>var foo = myForm.foo[]; // incorrect syntax var foo = myForm["foo[]"]; // correct syntax
Во-вторых, обозначения квадратной скобки полезны при работе с именами свойств, которые меняются предсказуемым образом:
blockquote>for (var i = 0; i < 10; i++) { someFunction(myForm["myControlNumber" + i]); }
Roundup:
blockquote>
- Точечная запись быстрее записывается и читается.
- Обозначение квадратной скобки позволяет получить доступ к свойствам, содержащим специальные символы и выбор свойств с использованием переменных
Другим примером символов, которые нельзя использовать с точечной нотацией, являются имена свойств , которые сами содержат точку .
Например, Ответ json может содержать свойство, называемое
bar.Baz
.var foo = myResponse.bar.Baz; // incorrect syntax var foo = myResponse["bar.Baz"]; // correct syntax
Вам нужно использовать скобки, если имена свойств имеют специальные символы:
var foo = {
"Hello, world!": true,
}
foo["Hello, world!"] = false;
Кроме этого, я полагаю, это просто вопрос вкуса. IMHO, точечное обозначение короче и делает более очевидным, что это свойство, а не элемент массива (хотя, конечно, JavaScript не имеет ассоциативных массивов).
Обозначение скобок позволяет вам получить доступ к свойствам по имени, хранящимся в переменной:
var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello
obj.x
не будет работать в этом случае.
Случай, когда примечание []
полезно:
Если ваш объект является динамическим, и могут быть некоторые случайные значения в таких ключах, как number
и []
или любой другой специальный символ, например -
var a = { 1 : 3 };
Теперь, если вы попытаетесь получить доступ, как a.1
, он будет через ошибку, потому что он ожидает строку там.
Точечная нотация не работает с некоторыми ключевыми словами (например, new
и class
) в Internet explorer 8.
У меня был этот код:
//app.users is a hash
app.users.new = {
// some code
}
И это запускает страшный «ожидаемый indentifier» (по крайней мере, на IE8 на windows xp, я не пробовал другие среды). Простое исправление для этого состоит в том, чтобы переключиться на запись в скобках:
app.users['new'] = {
// some code
}
Вообще говоря, они выполняют ту же работу. Тем не менее, нотация в виде скобок дает вам возможность делать то, что вы не можете сделать с точечной нотацией, например
var x = elem["foo[]"]; // can't do elem.foo[];
. Это можно расширить до любого свойства, содержащего специальные символы.
Вы должны использовать обозначение квадратной скобки, когда -
var ob = {
1: 'One',
7 : 'Seven'
}
ob.7 // SyntaxError
ob[7] // "Seven"
var ob = {
'This is one': 1,
'This is seven': 7,
}
ob.'This is one' // SyntaxError
ob['This is one'] // 1
var ob = {
'One': 1,
'Seven': 7,
}
var _Seven = 'Seven';
ob._Seven // undefined
ob[_Seven] // 7
Обозначение скобок может использовать переменные, поэтому полезно в двух случаях, когда точечная нотация не будет работать:
1) Когда имена свойств динамически определяются (когда точные имена неизвестны до времени исполнения) .
2) При использовании цикла for..in для прохождения всех свойств объекта.
источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
Позвольте мне добавить еще пример использования квадратного обозначения. Если вы хотите получить доступ к свойству, скажите x-proxy
в объекте, тогда -
будет интерпретироваться неправильно. Их также некоторые другие случаи, такие как пространство, точка и т. Д., Где точечная операция вам не поможет. Кроме того, если u имеет ключ в переменной, то только способ доступа к значению ключа в объекте - это скобка. Надеюсь, вы получите еще какой-то контекст.
Два наиболее распространенных способа доступа к свойствам в JavaScript - это точка и квадратные скобки. И value.x and value[x]
получают доступ к свойству по значению, но не обязательно к одному и тому же свойству. Разница заключается в том, как интерпретируется х. При использовании точки точка после точки должна быть допустимым именем переменной, и она непосредственно называет это свойство. При использовании квадратных скобок выражение между скобками оценивается для получения имени свойства. В то время как value.x получает свойство value с именем «x», значение [x] пытается оценить выражение x и использует результат как имя свойства.
Итак, если вы знаете, что интересующее вас свойство в называется «длина», вы говорите value.length
. Если вы хотите извлечь свойство, названное значением, хранящимся в переменной i
, вы скажете value[i]
. И поскольку имена свойств могут быть любой строкой, если вы хотите получить доступ к свойству с именем “2”
или “John Doe”
, вы должны использовать квадратные скобки: value[2] or value["John Doe"]
. Это возможно, даже если вы знаете точное имя свойства заранее, потому что ни “2” nor “John Doe”
не является допустимым именем переменной, и поэтому к нему нельзя получить доступ через точечную нотацию.
В случае массивов
Элементы массива хранятся в свойствах. Поскольку имена этих свойств являются числами, и нам часто нужно получить их имя от переменной, мы должны использовать синтаксис скобки для доступа к ним. Свойство length массива сообщает нам, сколько элементов оно содержит. Это имя свойства является допустимым именем переменной, и мы знаем его имя заранее, поэтому, чтобы найти длину массива, вы обычно пишете array.length
, потому что это легче записать, чем array["length"]
.
The elements in an array are stored in properties
вот что меня смущает. Что вы подразумеваете под хранением в свойствах? Что такое свойства? В моем понимании массив - это просто набор значений без свойств. Если они хранятся в свойствах, то почему это не property: value
/ ассоциативный массив?
– Limpuls
19 November 2017 в 16:04
Будьте осторожны при использовании этих обозначений: например. если мы хотим получить доступ к функции, присутствующей в родительском окне окна. В IE:
window['parent']['func']
не эквивалентен
window.['parent.func']
Мы можем либо использовать:
window['parent']['func']
, либо
window.parent.func
для доступа к ней