Почему я могу добавить названные свойства к массиву, как будто это был объект?

Вы можете добиться этого, используя jQuery, как показано ниже.

Использование jQuery =>

$(function(){
  $('input[type="radio"]').click(function(){
    if ($(this).is(':checked'))
    {
      if( $(this).val()=='4' )
      {
        $("#uploadtext").text("Editor");
      }
      else
      {
          $("#uploadtext").text("File");
      }
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<div class="form-group">
    <label for="inputPassword3" class="col-sm-3 control-label">Register As<sup style="color:red">*</sup></label>
    <div class="col-sm-7">
        <label class="radio-inline">
            <input type="radio" checked name="noaUserType" id="inlineRadio1" value="3"> Contributor
        </label>
        <label class="radio-inline">
            <input type="radio" name="noaUserType" id="inlineRadio2" value="4"> Editor
        </label>
    </div>
</div>
<span id="noaSpanRegFileDivs">
    <div id="noaDivRegFile_1" class="form-group">
        <label for="inputPassword3" class="col-sm-3 control-label">Upload <span id="uploadtext">File</span><sup style="color:red">*</sup></label>
    </div>
</span>

103
задан Quentin 19 August 2018 в 09:49
поделиться

4 ответа

Практически все в javascript является объектом, поэтому вы можете «злоупотреблять» объектом Array , задав ему произвольные свойства. Однако это следует считать вредным . Массивы предназначены для данных с числовой индексацией - для нечисловых ключей используйте Object.

Вот более конкретный пример, почему нечисловые ключи не «подходят» к массиву:

var myArray = Array();
myArray['A'] = "Athens";
myArray['B'] = "Berlin";

alert(myArray.length);

Это не будет отображать '2' , но '0' - фактически, в массив не было добавлено никаких элементов, только некоторые новые свойства добавлены к объекту массива.

130
ответ дан 24 November 2019 в 04:20
поделиться

В JS-массивах объекты, только слегка измененные (с несколькими дополнительными функциями).

Такие функции, как:

concat
every   
filer
forEach
join
indexOf
lastIndexOf
map
pop
push
reverse
shift
slice
some
sort
splice
toSource
toString
unshift
valueOf 
14
ответ дан 24 November 2019 в 04:20
поделиться

Все в JavaScript - это объекты, кроме примитивных типов.

Код

var myArray = Array();

создает экземпляр объекта Array, а

var myObject = {'A': 'Athens', 'B':'Berlin'};

создает экземпляр объекта Object.

Попробуйте следующий код

alert(myArray.constructor)
alert(myObject.constructor)

Итак, вы увидите, что разница заключается в типе конструктора объекта.

Экземпляр объекта Array будет содержать все свойства и методы прототипа Array.

5
ответ дан 24 November 2019 в 04:20
поделиться

Нотация {} - это просто синтаксический сахар, чтобы сделать код лучше; -)

JavaScript имеет много похожих конструкций, таких как построение функций, где function ( ) является просто синонимом для

var Func = new Function("<params>", "<code>");
-1
ответ дан 24 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

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