1戒职,引用類型有哪些栗恩?非引用類型有哪些2.如下代碼輸出什么?為什么
圖片.png
(1)引用類型:對象洪燥,數(shù)組磕秤,正則,函數(shù)捧韵,data類型
(2)非引用類型:number,boolean,undefined,null市咆,symbol(new in ES 6)
(3)輸出:
false
obj {a:1,b:2}
true
(4)原因:
輸出一:在棧里面obj1對象存的地址是"obj1" ,obj2對象存的地址是"obj2"
obj1==obj2 <=>"obj1"=="obj2"再来,所以結果不相等
輸出二:obj1=obj2 蒙兰,是把obj2對象的地址賦值給obj1棧空間其弊,現(xiàn)在兩個楍海空間都指向同一個地址
所以obj1輸出對象obj2
輸出三: 由于輸出二時,先把obj2對象的地址賦值給了obj1,所以obj1和obj2指向了同一個堆中對象地址
所以obj1==obj2結果true
3.如下代碼輸出什么? 為什么
輸出:
1
2
{name:"hellow",age:3}
[1,2,object]
圖片.png
4.如下代碼輸出什么? 為什么
圖片.png
5,過濾如下數(shù)組梭伐,只保留正數(shù)痹雅,直接在原數(shù)組上操作
圖片.png
代碼:
<script>
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
for(var i=0;i<arr.length;i++){
if(arr[i]<=0){
arr.splice(i,1);
i--;
}else{
continue;
}
}
}
filter(arr)
console.log(arr) // [3,1,2]
</script>
運行結果:
圖片.png
6.過濾如下數(shù)組,只保留正數(shù)糊识,原數(shù)組不變绩社,生成新數(shù)組
圖片.png
代碼:
<script>
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
var newarr=[];
for (var i=0;i<arr.length;i++) {
if(arr[i]>0){
newarr.push(arr[i]);
}
continue;
}
return newarr;
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr) // [3,1,0,-1,-2,2,-5]
</script>
運行結果:
圖片.png
7,深拷貝(一個對象嵌套一個對象,嵌套的這個對象只包含基本類型)
法一:
<script>
var obj1={
name:"pearl",
age:24,
firend:{
name:"liu",
age:24
}
}
function deepCopy(obj){
var obj2={};
for(var key in obj){
if(typeof obj[key]=="number"||typeof obj[key]=="string"||typeof obj[key]=="boolean"||
typeof obj[key]==undefined||typeof obj[key]==null){
obj2[key]=obj[key];
}else{
obj2[key]=deepCopy(obj[key]);
}
}
return obj2;
}
console.log(deepCopy(obj1));
</script>
運行結果:
圖片.png
法二:
JSON方法
對象=>字符串=>對象
<script>
var oldobj={
name:"pearl",
age:24,
firend:{
name:"liu",
age:24
}
}
function deepCopy(obj){
var obj2;
obj2=JSON.stringify(obj);
obj2=JSON.parse(obj2);
return obj2;
}
var newobj=deepCopy(oldobj);//得到新對象newobj
newobj.age=40;//改變新對象中age的值赂苗,測試會不會牽連到oldobj
console.log(newobj);//輸出新對象
console.log(oldobj)愉耙;//輸出oldobj對象
</script>
輸出結果:
圖片.png