Koans-06_Types-part2
let name = 'codestates';
console.log(name) // 'codestates'
console.log(name.toUpperCase())// 'CODESTATES'
하지만 원본은 바뀌지 않는다.
console.log(name)// 'codestates'
재할당은 가능합니다.
name = name.toUpperCase();
console.log(name) // 'CODESTATES'
(2)元のデータ型を変数に割り当てると,値そのもののコピーが発生する.let overTwenty = true; (3) false로 바뀜
let allowedToDrink = overTwenty; // (1) 복사가 일어남. (4) 바뀌지 않음)
overTwenty = false; (2) 변수에 재할당
console.log(overTwenty)//false;
console.log(allowedToDrink)//true;
let variable = 'variable';
let variableCopy = 'variableCopy'; (2)'variable'바뀜
variableCopy = variable; (1) 복사가 일어남
variable = variableCopy; (3) 'variable'바뀐 상태로 재할당
console.log(variable)//'variable';
(3)元のデータ型または元のデータ型のデータを関数のパラメータとして渡すと,値自体のコピーが発生する.let currentYear = 2020;
function afterTenYears(year) {
year = year + 10;
}// currentYear 2020
afterTenYears(currentYear);
console.log(currentYear)//2020;
function afterTenYears2(currentYear) {
currentYear = currentYear + 10;
return currentYear;
}
let after10 = afterTenYears2(currentYear);
console.log(currentYear)2020;
console.log(after10)2030;
사실 함수의 인자도 변수에 자료(data)를 할당하는 것입니다.
함수를 호출하면서 넘긴 인자가 호출된 함수의 지역변수로 (매 호출 시마다) 새롭게 선언됩니다.
---
만약
function afterTenYears2() {
currentYear = currentYear + 10;
return currentYear;
}
let after10 = afterTenYears2();
// or
afterTenYears2();
함수의 인자가 없는 상태 였다면, 함수에 변수가 없는것 입니다.
그래서 스코프를 통해서 전역변수를 찾아 전역변수를 바꿉니다.
console.log(currentYear)2030;
console.log(after10)2040;
(2)参照データ型を変数に割り当てると、データのアドレスが格納される.
const overTwenty = ['hongsik', 'minchul', 'hoyong'];
let allowedToDrink = overTwenty; // 데이터 주소를 공유 한다.
overTwenty.push('san');
expect(allowedToDrink).to.deep.equal(['hongsik', 'minchul', 'hoyong', 'san']);
overTwenty[1] = 'chanyoung';
expect(allowedToDrink[1]).to.deep.equal('chanyoung');
deep.equalは、配列内の要素またはオブジェクトのプロパティが同じかどうかを確認するマッチングです.deep.なぜequalを使うのか
ソース:https://pythonq.com/so/javascript/46433
const ages = [22, 23, 27];
allowedToDrink = ages;
expect(allowedToDrink === ages).to.equal(true);
expect(allowedToDrink === [22, 23, 27]).to.equal(false);
const nums1 = [1, 2, 3];
const nums2 = [1, 2, 3];
expect(nums1 === nums2).to.equal(false);
const person = {
son: {
age: 9,
},
};
const boy = person.son;
boy.age = 20;
expect(person.son.age).to.equal(20);
expect(person.son === boy).to.equal(true);
expect(person.son === { age: 9 }).to.equal(false);
expect(person.son === { age: 20 }).to.equal(false);
const nums1 = [1, 2, 3];
const nums2 = [1, 2, 3];
expect(nums1 === nums2).to.equal(false);
配列nums 1と配列num 2は、同じデータ[1, 2, 3]
を含むが、両者は異なることは明らかである.実際、変数num 1とnum 2は配列ではありません.
参照タイプの変数はアドレスのみを格納します.
正確には、変数num 1は、データ
[1, 2, 3]
を格納するメモリ空間(heap)のアドレスを含む.const nums1 = [1, 2, 3];
//[1, 2, 3]
はheapに格納され、この位置のアドレスは変数num 1に格納される.const nums2 = [1, 2, 3];
//[1,2,3]heapに格納され、この位置のアドレスは変数num 2に格納される.
heapは、変数num 1およびnum 2に格納される2つの
[1, 2, 3]
を格納するようになった.ソース:コードステータス
Reference
この問題について(Koans-06_Types-part2), 我々は、より多くの情報をここで見つけました https://velog.io/@jelkov/Koans-06Types-part2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol