JavaScript面试题
1、JavaScript中如和检测有关变量是String类型,写出函数实现。
①利用typeof()方法检测。
function(str) {
return typeof(str) === “string” ? true : false;
}
②利用constructor属性检测。
function(str) {
return str.constructor === String ? true : false;
}
//如果变量是undefined的话会报错。
③利用原型上的toString方法检测。
function(str) {
return Object.prototype.toString.call(str) === ‘[object String]’ ? true : false;
}
2、请用js去除字符串中的空格?
①利用正则表达式对象。
function(str) {
return this.isString(str) ? str.replace(/\s*/g, ”) : alert(‘输入有误’);//先判断传入的变量是不是字符串类型的 在进行去空格操作。
}
②利用正则表达式对象,去除字符串两端的空格。
function(str) {
return this.isStringThree(str) ? str.replace(/^\s*|\s*$/g, ”) : alert(‘输入有误’);//先判断传入的变量是不是字符串类型的 在进行去空格操作。
}
③利用jquery对象,去除字符串两端的空格。
function(str) {
return this.isString(str) ? $.trim(str) : alert(‘输入有误’);//先判断传入的变量是不是字符串类型的 在进行去空格操作。
}
④利用包装类对象上的trim()方法,去除字符串两端的空格。
function(str) {
return this.isString(str) ? str.trim() : alert(‘输入有误’);
}
3、如何获取浏览器URL中查询字符串中的参数?
①具体方法如下
function() {
var href = window.location.href.split(‘?’),//用bom对象获取当前页面的地址 类型为字符串,再用包装类对象中的split()方法进行分离查询字符串和地址。
str,
result = {},//提前准备好容器。
i = 0;
if(href[0] === window.location.href) {
alert(‘没有参数’);//判断是否有查询字符串 如果没有 href数组里的第一个字符串和原地址相同。
return;//结束函数。
}
str = href[1].split(‘&’);//获取查询字符串。
for(; i < str.length; i++) {
var arg = str[i].split(‘=’);//键/值分离。
result[arg[0]] = arg[1];//赋值给容器。
}
return result;//返回结果。
}
4、利用this写出3个典型的应用?
①html元素事件属性中使用。
<input type=”button” name=”” id=”” value=”xxxxx” onclick=”showinfo(this)” />//传入元素对象。
function showinfo(x) {
alert(x.value);//显示元素对象属性value的值。
}
②在构造函数中使用。
function(name, color) {
this.name = name;
this.color = color;
return this;
}
③求数组最大值中使用。
var numbers = [5, 458 , 120 , -215 ];
var maxInNumbers = Math.max.apply(this, numbers);
console.log(maxInNumbers);// 458
var maxInNumbers = Math.max.call(this,5, 458 , 120 , -215);
console.log(maxInNumbers); // 458
5、js字符串常用的方法有哪些?
-
concat() – 包装类对象方法。把当前字符串与参数里的字符串进行组合 返回一个新的字符串。//’ssss’.concat(‘aaaa’,’sss’) return ‘ssssaaaasss’;
-
indexOf() – 传入一个字符串,返回与该字符串匹配的子串的第一个位置索引,如果没有匹配项,返回 -1 。//’ssssa’.indexOf(‘a’) return 4 ;
-
charAt() – 返回指定位置的字符。传入一个索引位置参数,返回该位置的字符。
-
lastIndexOf() –传入一个字符串,返回与该字符串匹配的子串的最后一个位置索引,如果没有匹配项,返回 -1 。
-
match() –检查一个字符串是否匹配一个正则表达式。返回匹配到的值的数组 没有匹配的则返回null
-
substr() 返回从string的startPos位置,长度为length的字符串// ‘sabsns’.substr(2,3); “bsn”
-
substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。//’sabsns’.substring(2,3); “s” 不包括第2位那个数。
-
slice() – 两个参数 一个是数组的开始位 一个是结束位 这方法是数组用的,返回的也是数组,注意不是包装类的对象方法。
-
replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。
-
search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。
-
split() – 两个参数 一个是数组的开始位 一个是结束位 这方法是数组用的
-
length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。
-
toLowerCase() – 将整个字符串转成小写字母。
-
toUpperCase() – 将整个字符串转成大写字母。
6、dom节点的创建、移除、添加、查找、替换、插入?
①创建
document.createDocumentFragment();//创建文档片段,相当于一个容器,可以往里面添加dom元素节点,然后一起输出到html 进行渲染,从而减少渲染次数,增加性能。
document.createElement();
document.createTextNode();//创建文本节点 ,不常用。
②移除
dom对象.removeChild(dom对象);
function xx() {
var a = document.getElementsByClassName(‘ss’)[0];
document.getElementsByTagName(‘body’)[0].removeChild(a);//移除匹配的节点
return ‘移除成功’;
}
③添加
appendChild()
④替换
replaceChild()
⑤插入
insertBefore()
⑥查找
document.getElementsByClassName();//类名属性查找
document.getElementsByName();//通过name属性进行查找
document.getElementsByTagName();//标签查找
document.getElementById();//id属性查找
7、 typeof 和 instanceof 有什么区别。
相同点: typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。
不同点:
①typeof是一元运算符 instanceof是二元运算符
②typeof有局限性,对数组,null会判断为对象,instanceof则不会,
③instanceof是通过看它原型链上是否有该对象,