2015-04-05 2 views
1

Ниже приведен мой код, в котором я заглавными строками какого-либо объекта, теперь, когда я консолю в нижней части, он выглядит как область действия метода (toUpperCase в этом case) применяется только в цикле for. Я знаю, что могу добиться результата, сохранив/нажав результат на другой массив/объект, но я хочу знать, является ли их доступным/доступным методом/метод в JS, через который метод напрямую применяется к исходной переменной и напрямую меняет ее значение?Как изменить значение в JavaScript без сохранения в другую переменную

код-

var odr = { 
    testkey1: "a test", 
    testkey2: { 
     "name": "harris", 
     "city": "New York", 
     "addr": "107 Suite" 
    }, 
    testkey3: "b test", 
}; 

if(odr.testkey2 !== undefined) { 
    for(var key in odr.testkey2) { 
     if(odr.testkey2.hasOwnProperty(key)){ 
      if(typeof odr.testkey2[key] == 'string') { 
       console.log(odr.testkey2[key].toUpperCase()); 
      }  
     } 
    } 
} 

console.log(odr.testkey2); 

Результат -

Object {name: "harris", city: "New York", addr: "107 Suite"} 

Рабочая Fiddle - http://jsfiddle.net/o6d45en6/

+0

Нет, я думаю, что все методы, которые модифицируют строку сделать это, а затем возвращают новую строку; почему вы против создания новой переменной? Вы можете (внутри цикла 'for':' odr.testkey2 [key] = odr.testkey2 [key] .toUpperCase() ', если вы просто не хотите создавать новую/временную переменную, чтобы выбросить. –

+0

@DavidThomas Да, очень верно, что я проверил, и его работа в соответствии с комментарием, BTW, который я проверил, JS - это пропуск по значению, поэтому он не влияет непосредственно на значения..thx new для JS :) Имейте отличный день :) –

ответ

0

я мог бы неправильно понять, что вы asking.But String.toUpperCase() НЕ бах метод который обновляет его значение, просто вызвав метод. Так что, если вы хотите обновить значение, вам нужно подставить его.

if(odr.testkey2 !== undefined) { 
    for(var key in odr.testkey2) { 
     if(odr.testkey2.hasOwnProperty(key)){ 
      if(typeof odr.testkey2[key] == 'string') { 
       odr.testkey2[key] = odr.testkey2[key].toUpperCase(); 
      }  
     } 
    } 
} 

FYI, в JavaScript, объект всегда проходит свою ссылку, когда вы заменить it.which означает, что вы не можете сделать это

var copiedObject = odr; 
if(copiedObject.testkey2 !== undefined) { 
    for(var key in copiedObject.testkey2) { 
     if(copiedObject.testkey2.hasOwnProperty(key)){ 
      if(typeof copiedObject.testkey2[key] == 'string') { 
       copiedObject.testkey2[key] = copiedObject.testkey2[key].toUpperCase(); 
      }  
     } 
    } 
} 
console.log(odr); // -> odr object has also changed. because copiedObject is just a reference of odr. 

, чтобы избежать этого, необходимо deep copy объекта.

var copiedObject = JSON.parse(JSON.stringify(odr)); 

или

var copiedObject = jQuery.extend({}, odr); 
+0

"*' String.toUpperCase () 'НЕ - метод bang *" - что это значит? Что такое «метод взлома»? –

+0

@suish yeah..its case..I принимаю это (неспособное upvote из-за репутации) –

+0

@suish Thx для объяснения –

Смежные вопросы