- 引用类型有哪些?非引用类型有哪些
引用类型有对象,数组,函数,正则
非引用类型有数值,布尔,null,undefined
- 如下代码输出什么?为什么
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); //false,obj1和obj2是两个不同的对象,指向两个不同的地址
console.log(obj1 = obj2); //{a:1, b:2}; 赋值语句将obj2的值赋值给obj1并输出赋值后的obj1的值
console.log(obj1 == obj2); //true ,因为上一句已经将obj2赋值给obj1,obj1指向与obj2相同的地址
- 如下代码输出什么? 为什么
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 按顺序执行,a为非引用类型,所以a的值为1时,赋值给aa 开辟新的内存空间,后面改变的是a的值,不影响aa
console.log(bb) // 2 理由同上
console.log(cc) // { name: 'hello', age: 3 }
console.log(dd) // { name: '饥人谷', age: 3 } c和d都是引用类型,赋值时会使指针指向同一个地址,所以后面改变的相同内存区域的数据
- 如下代码输出什么? 为什么
var a = 1
var c = { name: 'jirengu', age: 2 }
function f1(n){
++n
}
function f2(obj){
++obj.age
}
f1(a) // 会默认执行var n = a;属于值传递,++n时,a不变
f2(c) // 会默认执行var obj = c;这时会指向同一块内存区域,所以原内存区域属性进行修改时,c也会修改 即obj.age为3
f1(c.age) // c.age值为2,相当于f1(2),相当于执行var n=2;
console.log(a) //1
console.log(c) // { name: 'jirengu', age: 3 }
- 过滤如下数组,只保留正数,直接在原数组上操作
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--;// 删除了一个元素,索引减一
}
}
}
filter(arr)
console.log(arr) // [3,1,2]
- 过滤如下数组,只保留正数,原数组不变,生成新数组
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]);
}
}
return newArr;
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr) // [3,1,0,-1,-2,2,-5]
- 写一个深拷贝函数,用两种方式实现
// 声明一个对象
var objTest = {
name: Lucifer;
age: 23;
skills:{
html,
css,
javascript
}
}
// 方法一
function deepCopy(obj) {
var newObj={};
for(var key in obj) {
if(typeof obj[key] === 'object' && obj[key] !== null) {
newObj[key] = deepCopy(obj[key]);
}else {
newObj[key] = oldObj[key];
}
}
return newObj;
}
var objCopy = deepCopy(objTest);
console.log(objCopy);
// 方法二
function deepCopy(obj) {
var newObj = JSON.parse(JSON.stringify(obj));
return newObj;
}
var objCopy = deepCopy(objTest);
console.log(objCopy);
网友评论