Почему деструктурирование и конкатенация оставляют разные типы неопределенных массивов? [Дубликат]

Небольшая модификация приведенного выше сценария. Вы можете использовать эту функцию внутри любого класса без расширения класса BladeCompiler.

public function bladeCompile($value, array $args = array())
{
    $generated = \Blade::compileString($value);

    ob_start() and extract($args, EXTR_SKIP);

    // We'll include the view contents for parsing within a catcher
    // so we can avoid any WSOD errors. If an exception occurs we
    // will throw it out to the exception handler.
    try
    {
        eval('?>'.$generated);
    }

    // If we caught an exception, we'll silently flush the output
    // buffer so that no partially rendered views get thrown out
    // to the client and confuse the user with junk.
    catch (\Exception $e)
    {
        ob_get_clean(); throw $e;
    }

    $content = ob_get_clean();

    return $content;
}
23
задан Felix Kling 21 May 2012 в 11:54
поделиться

5 ответов

Кажется, что новый способ Chrome отображать неинициализированные индексы в массивах (и объектах, подобных массиву ):

> Array(100)
[undefined × 100]

Это, конечно, лучше, чем печать [undefined, undefined, undefined,...] или как бы это было раньше.

Хотя, если есть только одно значение undefined, они могут сбросить x 1.

38
ответ дан Felix Kling 31 August 2018 в 21:38
поделиться

Вот как это выглядит: введите этот код в консоль chrome devtools: -

arr = new Array(4);
arr[2] = "adf";
console.log(arr);    // [undefined × 2, "adf", undefined × 1]

См. первые два последовательных «неопределенных», которые представлены * 2, чтобы показать, что есть два последовательных undefined there

1
ответ дан Ankur Marwaha 31 August 2018 в 21:38
поделиться
-1
ответ дан Community 31 August 2018 в 21:38
поделиться

Новые версии Chrome используют empty × вместо undefined ×, чтобы сделать разницу более четкой.

Например, ввод [, undefined] в консоли DevTools приводит к:

▶(2) [empty × 1, undefined]

и проверяет ключи в:

▼(2) [empty × 1, undefined]
   1: undefined
   length: 2
  ▶__proto__: Array(0)
0
ответ дан Slai 31 August 2018 в 21:38
поделиться

Google Chrome, похоже, отображает разреженный массив с использованием этой undefined x n нотации. Он покажет [undefined, undefined], если он не является разреженным массивом:

var arr = new Array(2);
console.log(arr);

var arr2 = [];
arr2[3] = 123;
console.log(arr2);

var arr3 = [,,,];
console.log(arr3)

var arr4 = [,];
console.log(arr4)

var arr5 = [undefined, undefined]
console.log(arr5)

var arr6 = [undefined]
console.log(arr6)

arr1 to arr4 - все разреженные массивы, а arr5 и arr6 - нет. Chrome покажет их как:

[undefined × 2] 
[undefined × 3, 123] 
[undefined × 3] 
[undefined × 1] 
[undefined, undefined] 
[undefined] 

обратите внимание на [undefined x 1] для разреженного массива.

Поскольку вы удалили элемент, это: Если вы удалите элемент из массива, массив становится разреженным.

2
ответ дан 太極者無極而生 31 August 2018 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: