js基础面试题总结

javascript的typeof返回哪些数据类型

typeof undefined
‘undefined’
typeof null
‘object’
typeof true
‘boolean’
typeof 123
‘number’
typeof “abc”
‘string’
typeof function() {}
‘function’
typeof {}
‘object’
typeof [ ]
‘object’
typeof NAN
‘number’

例举3种强制类型转换和2种隐式类型转换?

强制: parseInt(), parseFloat(), Number(), Boolean(), String()

隐式: +, -

// 1.parseInt() 把值转换成整数
parseInt(“1234blue”); // 1234
parseInt(“0xA”); // 10
parseInt(“22.5”); // 22
parseInt(“blue”); // NaN
parseInt(“AF”, 16); // 175
parseInt(“10”, 2); // 2
parseInt(“10”, 8); // 8
parseInt(“10”, 10); // 10
// 2.parseFloat() 把值转换成浮点数,没有基模式
parseFloat(“1234blue”); // 1234.0
parseFloat(“0xA”); // NaN
parseFloat(“22.5”); // 22.5
parseFloat(“22.34.5”); // 22.34
parseFloat(“0908”); // 908
parseFloat(“blue”); // NaN
// 3.Number() 把给定的值转换成数字(可以是整数或浮点数),Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:
Number(false) // 0
Number(true) // 1
Number(undefined) // NaN
Number(null) // 0
Number(“5.5”) // 5.5
Number(“56”) // 56
Number(“5.6.7”) // NaN
Number(new Object()) // NaN
Number(100) // 100
// 4.Boolean() 把给定的值转换成Boolean型
Boolean(""); // false
Boolean(“hi”); // true
Boolean(100); // true
Boolean(null); // false
Boolean(0); // false
Boolean(new Object()); // true
// 5.String() 把给定的值转换成字符串
String(123) // “123”
// 6. + -
console.log(0 + ‘1’) // “01”
console.log(2 - ‘1’) // 1

split() join() 的区别

split()

方法用于把一个字符串分割成字符串数组

join()
定义:将数组中所有的元素都转化为字符串拼接在一起,返回最后生成的字符串

var a = [1,2,3];
console.log(a.join());    //1,2,3 默认使用逗号分隔
console.log(a.join(""));  //123   转化为字符串的常用方法
console.log(a.join("-")); //1-2-3 自定义分隔符
console.log(a);           //[1,2,3]  不修改原素组
var b = new Array(5);
console.log(b.join('*')); //****  4个连字号组成字符串

Join 函数获取一批字符串,然后用分隔符字符串将它们联接起来,从而返回一个字符串。Split 函数获取一个字符串,然后在分隔符处将其断开,从而返回一批字符串。但是,这两个函数之间的主要区别在于 Join 可以使用任何分隔符字符串将多个字符串连接起来,而 Split 只能使用一个字符分隔符将字符串断开。
简单地说,如果你用split,是把一串字符(根据某个分隔符)分成若干个元素存放在一个数组里。而Join是把数组中的字符串连成一个长串,可以大体上认为是split的逆操作。

数组方法pop() push() unshift() shift()

push在数组的末尾添加一个或者多个元素,返回新数组的长度
pop删除数组的最后一个元素,返回它删除的值元素
unshift是在数组头部添加一个或多个元素。如果一次性传入多个参数,多个参数按照原先的位置直接加到数组中。返回新数组的长度
shift:删除数组的第一个元素,并返回删除的元素

//push尾部追加
var a = [1,2,3];
var b = a.push(4,5);
console.log(b);   //5  返回的是新数组的长度。
console.log(a);   //[1,2,3,4,5] 直接原数组尾部添加4
//pop尾部删除
var a = [1,2,3];
var b = a.pop();
console.log(b);   //3  返回的删除的元素。
console.log(a);   //[1,2] 直接在原数组上删除元素3
//unshift头部追加
var a=[1,2,3]
var b=a.unshift(1)
console.log(b)  //5 返回的是新数组的长度
//shift头部删除
var a = [1, 2, 3, 4]
var b = a.shift()
console.log(b);  //1 返回的是删除的元素
console.log(a);  //[2,3,4]

事件绑定和普通事件有什么区别

普通事件
通过 on 来添加事件的方式

<button id="btn">按钮</button>
document.getElementById('btn').onclick=function(){}; 
document.getElementById('btn').onclick=function(){}; 

如果说给同一个元素绑定了两次或者多次相同类型的事件,那么后面的绑定会覆盖前面 的绑定
事件绑定
通过指定的方法来添加事件的方式

addEventListener()

addEventListener("click", function(){}, true); // 此时的事件就是在事件冒泡阶段执行

事件绑定是指把事件注册到具体的元素之上,普通事件指的是可以用来注册的事件

call和apply的区别

call方法:
语法:call(thisObj,Object)
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

用js实现随机选取10–100之间的10个数字,存入一个数组,并排序

var arr= [];
function oRandom(istart,iend){
	var num = Math.floor(Math.random()*(iend-istart)+istart);
	return num;
}
for(let i=0;i<10;i++){
	var num2 = oRandom(10,100);
	arr.push(num2)
}
arr.sort(a-b);

JavaScript的数据类型都有什么?

JS数据类型有7种,分别是:
3种基本类型(数字,字符串,布尔)
2种引用数据类型(对象,数组)
以及2种特殊数据类型(undefined,null)

编写一个数组去重的方法

方法一:

var arr = [0,2,3,4,4,0,2];
var obj = {};
var tmp = [];
for(var i = 0 ;i< arr.length;i++){
if( !obj[arr[i]] ){
obj[arr[i]] = 1;
tmp.push(arr[i]);
}
}
console.log(tmp);

结果如下: [0, 2, 3, 4]

方法二:

var arr = [2,3,4,4,5,2,3,6],
arr2 = [];
for(var i = 0;i< arr.length;i++){
if(arr2.indexOf(arr[i]) < 0){
arr2.push(arr[i]);
}
}
console.log(arr2);

结果为:[2, 3, 4, 5, 6]

方法三:

var arr = [2,3,4,4,5,2,3,6];
var arr2 = arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
console.log(arr2);

结果为:[2, 3, 4, 5, 6]

如何阻止事件冒泡和默认事件

// 阻止事件冒泡
function stopBubble(e) {
  if(e && e.stopPropagation){
      e.stopPropagation();
  } else {
    window.event.cancelBubble = true;
  }
};
// 阻止浏览器的默认事件
function stopDefault(e){
  if(e && e.preventDefault) {
    e.preventDefault();
  } else {
    window.event.returnValue = false;
  }
  return false;
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值