复盘面试题

  1. ‘5’+3和‘5’-3 输出多少
console.log('5'+3);//字符串拼接数字 就是53
console.log('5'-3);//使用了减法,就是默认有个隐式转换,把字符串五变成number型

2.下面输出是什么

 var val = 'hello';
console.log('Value is'+(val ==='hello')?'something':'Nothing');
//something
var ary =[0,1,2];
 ary[10] = 10
console.log(ary.filter(function(x){
return x === undefined
}));//返回【】  filter 筛选数组 把满足条件的筛选出去
console.log(ary); //[0,1,2,空*7,10]
 function showCase(value) {
 switch(value){
case'A':console.log('Case A');
break;
case'B':console.log('Case ');
break;
case undefined:console.log('undefined');
break;
default:console.log('Do not know')
}
}
showCase(new String('A'))//虽然说是创建新的A进showcase里面,但是把整个创建的过程整体传进去,就会导致default 识别的String "A"
 console.log(new String("A"));
console.log([] == [])  //false

基本的数据类型放在栈里面的,直接存储的是值,而引用数据类型是放在堆里面的,每个空间都不一样,当我们访问引用数据类型时,对象、数组、函数,先从栈中找到该对象的内存地址,然后再从堆内存中取所需的数据,尽管他们的值是一样的,但是在堆中还是开辟两个空间独立存放这些引用数据类型

var months = ['Jan','March',"April","June"];
months.splice(1,0,"Feb");
console.log(months);

splice(index,num) 删除功能 index是起始位置,num删除几个
splice(index,0,insetValue)插入功能  有0就插入功能 index插入的位置,第三个值是插入的项
splice(index,num,insetValue) 替换功能   index起始位置,num删除的项数,插入任意数量的项

var trees =['xyz','xxx','test','ryan','apple']
delete trees[3]
console.log(trees.length); //5
console.log(trees); //['xyz','xxx','test','空,'apple']

使用delete删除元素并不会使数组长度改变,只会把原来的元素值变成undefined
使用splice(start,count),这样删除就会改变原数组的长度  第二个参数是删除元素的个数,如果没有的话,就会删除包括索引值在内的后面的所有元素

var newtrees = trees.splice(3,1)
console.log(trees.splice(3,1));
console.log(trees.length);
console.log(trees);/* 这样返回的长度就是4 真正把改元素删除 */
console.log(null instanceof Object);

null typeof是object  instanceof判断的是构造函数的prototype类型 这是一个bug 虽然说type 出来的null是object ,由于null并不是有object的原型创造出来的 所以返回false  null有自己的Null类型,而不是object类型

console.log(null === undefined);

两者的数据类型都不相同 不全等于

console.log(null == undefined);

null和undefined都代表着无效的值 所表示的内容也有相似性 但是不能绝对等于

console.log(NaN ==NaN);

NaN是代表着不等于任何数字,而不是一个数字的有很多,所以并不能相等 2abc  就是返回NaN 3abc也是返回NaN 肯定不等于

9.typeof的返回数据类型  undefined、 string、boolean、number、 Object、Function

10.undefined和not defined区别not defined
not defined未发现。如果在函数中调用了一个没有定义的变量,就会提示not defined。
undefined:未定义。是JavaScript的一种数据类型。定义一个变量但是未给它赋值,alert的时候就是undefined了。

11.apply 和call的异同
相同:
可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象
不同点:

apply:最多只能有两个参数——新this对象和一个数组。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里面。

call:则是直接的参数列表,主要用在js对象各方法互相调用的时候,使当前this实例指针保持一致,或在特殊情况下需要改变this指针。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
更简单地说,apply和call功能一样,只是传入的参数列表形式不同

12.typeof obj ==='object' 判断obj是不是一个对象有什么潜在弊端?如何避免这个弊端

主要是为了区分null和对象,因为使用typeof 来判断null,返回的结果也是object。
解决方法

if((obj!==null)&&(typeof obj==='object')&&(toString.call(obj)!="[object Array]")){}

上述方法分别判断obj不能为null,数组的情况,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值