Объяснение оператора if в jQuery при работе с JSON - PullRequest
1 голос
/ 17 декабря 2011

Я изучаю jQuery из книги «Изучение jQuery» и обнаружил часть кода, которая не понимает.

Есть часть JSON:

[
    {
        "term": "BACCHUS",
        "part": "n.",
        "definition": "A convenient deity invented by the...",
        "quote": [
            "Is public worship, then, a sin,",
            "That for devotions paid to Bacchus",
            "The lictors dare to run us in,",
            "And resolutely thump and whack us?"
        ],
        "author": "Jorace"
    },
    {
        "term": "BACKBITE",
        "part": "v.t.",
        "definition": "To speak of a man as you find him when..."
    },
    {
        "term": "BEARD",
        "part": "n.",
        "definition": "The hair that is commonly cut off by..."
    },

Вот код jQuery:

$(document).ready(function() {
    $('#letter-b a').click(function() {
        $.getJSON('b.json', function(data) {
            $('#dictionary').empty();
            $.each(data, function(entryIndex, entry) {
                var html = '<div class="entry">';
                html += '<h3 class="term">' + entry['term'] + '</h3>';
                html += '<div class="part">' + entry['part'] + '</div>';
                html += '<div class="definition">';
                html += entry['definition'];
                if (entry['quote']) {
                    html += '<div class="quote">';
                    $.each(entry['quote'], function(lineIndex, line) {
                        html += '<div class="quote-line">' + line + '</div>';

Может кто-нибудь объяснить мне значение этой строки:

if (entry['quote'])

PS Я пытался выполнить поиск в стеке и Google, но не смог найти объяснение этому.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Все, что делает (entry ['quote']), проверяет, существует ли этот ключ в структуре записи.

2 голосов
/ 17 декабря 2011

Ваша структура JSON имеет необязательный ключ quote.

Если ключ существует, entry['key'] оценивается как true в логическом контексте (if).Если он не существует, он оценивается как ложный, и последующий блок if не выполняется.

Итак, для суммирования:

if (entry['quote']) {        // This block will only run if the JSON contains
                             //  a key "quote"
    html += '<div class="quote">';

Если вы не уверены в значениипеременной в логическом контексте, конвертируйте ее в логическое значение, используя двойной восклицательный знак (двойное отрицание):

alert("Quote exists? True or false: " + !!entry["quote"]);
0 голосов
/ 17 декабря 2011

entry - это только второй аргумент в анонимной функции, на которую ссылается $.each. Часть ['quote'] представляет собой скобочную запись для ссылки на это конкретное свойство (т. Е. key ), которое в этом случае выглядит как

"quote": [
"Is public worship, then, a sin,",
"That for devotions paid to Bacchus",
"The lictors dare to run us in,",
"And resolutely thump and whack us?"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...