진급 4 작업
인용 형식 (대상, 그룹, 함수, 정규): 메모리에 저장된 대상을 가리킨다. 변수에 저장된 것은 사실상 하나의 바늘일 뿐, 이 바늘은 메모리에 저장된 다른 위치를 실행하고, 이 위치에서 대상을 저장한다.기본 형식 값 (수치, 볼 값,null,undefined): 창고 메모리에 저장된 간단한 데이터 세그먼트를 가리킨다.
2. 다음 코드는 무엇을 출력합니까?무엇 때문에
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
출력은:false {a:1,b:2}true false입니다. 같은 유형이지만 내용도 같지만 대상, 즉 인용 유형은 내용에 두 개의 저장 공간을 개척하여 전혀 영향을 주지 않습니다.{a:1,b:2}obj2를 obj1에 값을 부여했기 때문에 이때 출력하는 것은obj2의 내용입니다.위에 obj2를 obj1에 부여했기 때문에 이때는 이전의 obj1이 obj2에 덮어씌워진 것과 같다. 이때 obj2의 내용을 수정하면 obj1에 대응하는 내용을 바꿀 수 있고 이때는 저장 공간에 있다.
3. 다음 코드는 무엇을 출력합니까?무엇 때문에
var a = 1
var b = 2
var c = { name: ' ', age: 2 }
var d = [a, b, c]
var aa = a
var bb = b
var cc = c
var dd = d
a = 11
b = 22
c.name = 'hello'
d[2]['age'] = 3
console.log(aa) // 1
console.log(bb) // 2
console.log(cc) // { name: 'hello', age: 3}
console.log(dd) // [1,2,{name: 'hello',age:3}];
우선 a, b는 모두 기본 유형 값이고 d는 수조, c는 대상이지만 이들의 공통된 본질은 모두 인용 유형이다.console.log(aa)는 1이고 var aa = a;메모리에 aa의 위치가 있는데 이때 aa의 값은 a의 값으로 바뀐다. 비록 이후에 a와 b의 값을 수정했지만 aa와 bb에 영향을 주지 않는다.var cc = c; cc는 c의 내용 주소를 저장했는데 var d=[a, b, c]는 d=[a, b, c의 내용 주소]에 해당한다.그래서 c의 내용을 수정하면 cc와 d의 내용을 수정한다.var dd = d; d의 내용을 수정하면 dd의 내용을 수정하고 d[2]['age']=3;이 문장의 본질은 c.age=3이다.
4. 다음 코드는 무엇을 출력합니까?무엇 때문에
var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a)
f2(c)
f1(c.age)
console.log(a) // 1
console.log(c) // {name: 'jirengu', age: 3}
f1(a);즉function f1(n) {var n = a = 1,++n;}a는 기본 유형값으로 a와 n은 서로 영향을 주지 않는다.f2(c);즉functionf2(n){var obj=c(obj=c의 내용주소),++ obj.age;obj.age값에 1을 더하면 c.age의 값에 1을 더하는 것과 같다.f1(c.age); 즉function f1(n) {var n = c.age;n+;}c.age의 값을 수정하지 않았습니다. {var n = c.age; n++; c.age = n} 이렇게 하면 최종 결과는age가 4입니다.
5. 다음 수조를 필터하여 정수만 남기고 원수조에서 직접 조작
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
}
filter(arr)
console.log(arr) // [3,1,2]
var arr = [3,1,0,-1,-3,2,-5];
function filter(arr){
var j = 0;
for(var i = 0; i < arr.length; i++) {
if(arr[i] > 0) {
arr[j] = arr[i];
j++;
}
}
arr.length = j;
}
filter(arr);
console.log(arr); // [3,1,2]
6. 다음 수조를 필터하여 정수만 보존하고 원수조는 변하지 않으며 새 수조를 생성합니다
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr) // [3,1,0,-1,-2,2,-5]
function filter(arr){
var newArr = [];
var j = 0;
for(var i = 0; i < arr.length; i++) {
if(arr[i] > 0) {
newArr[j++] = arr[i]
}
}
return newArr;
}
7. 깊이 복사 함수를 써서 두 가지 방식으로 실현
첫 번째:
function deepCopy(oldObj) {
var newObj = {}; //
for(var key in oldObj) { //
if(oldObj.hasOwnProperty(key)) { // ( , )
if(typeof oldObj[key] === 'number' || typeof oldObj[key] === 'string' || typeof oldObj[key] === 'boolean' || oldObj[key] === undefined || oldObj[key] === null ) {
//
newObj[key] = oldObj[key];
} else {
//
newObj[key] = deepCopy(oldObj[key]);
}
}
}
return newObj;
}
두 번째
obj1 = JSON.parse(JSON.stringify(obj));
의 한계성: 함수를 복제할 수 없는 원형 체인이 없어졌고 대상은 Object이며 소속된 클래스가 없어졌다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.