javascript面试题总结(三)

javascript 中的垃圾回收机制?

答:在Javascript 中,如果一个对象不再被引用,那么这个对象就会被gc回收。如果两个对象互相引用,而不再被第3 者所引用,那么这两个互相引用的对象也会被回收。因为函数a 被b 引用,b 又被a 外的c 引用,这就是为什么函数a 执行后不会被回收的原因。

IE6为什么不能定义1px 左右的div 容器?

IE6 下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:
overflow:hidden | zoom:0.08 | line-height:1px

题目

  • 生成5 个不同的随机数
//思路:5 个不同的数,每生成一次就和前面的所有数字相比较,如果有相同的,则放弃当前生成的数字
var num=[];
for(var i = 0; i < 5; i++){
    num[i] = Math.floor(Math.random()*10) + 1; //范围是[1, 10]
    for(var j = 0; j < i; j++){
        if(num[i] == num[j]){
            i--;
        }
    }
}
console.log(num.toString())
function foo(){
    foo.a = function(){alert(1)};
    this.a = function(){alert(2)};
    a = function(){alert(3)};
    var a = function(){alert(4)};
};
foo.prototype.a = function(){alert(5)};
foo.a = function(){alert(6)};
foo.a(); //6
var obj = new foo();
obj.a(); //2
foo.a(); //1
var a = 5;
function test(){
    a = 0;
    alert(a);
    alert(this.a); //没有定义a 这个属性
    var a;
    alert(a)
}
test(); // 0, 5, 0
new test(); // 0, undefined, 0
 //**由于类它自身没有属性a, 所以是undefined**

计算字符串字节数:

new function(s){
if(!arguments.length||!s) return null;
    if(""==s) return 0;
    var l=0;
    for(var i=0;i<s.length;i++){
        if(s.charCodeAt(i)>255) l+=2; else l+=1; //charCodeAt()得到的是unCode码
    } //汉字的unCode 码大于255bit 就是两个字节
    alert(l);
}("hello world!");

匹配输入的字符:第一个必须是字母或下划线开头,长度5-20

var reg = /^[A-z0-9_]{5,20}/,
name1 = 'leipeng',
name2 = '0leipeng',
name3 = '你好leipeng',
name4 = 'hi';

请用代码实现outerHTML

//说明:outerHTML 其实就是innerHTML 再加上本身;
Object.prototype.outerHTML = function(){
var innerCon = this.innerHTML, //获得里面的内容
outerCon = this.appendChild(innerCon); //添加到里面
alert(outerCon);
}
演示代码:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="outer">
hello
</div>
<script>
Object.prototype.outerHTML = function(){
var innerCon = this.innerHTML, //获得里面的内容
outerCon = this.appendChild(innerCon); //添加到里面
alert(outerCon);
}
function $(id){
return document.getElementById(id);
}
alert($('outer').innerHTML);
alert($('outer').outerHTML);
</script>
</body>
</html>

解析URL 成一个对象?

String.prototype.parseQueryString=function () {
    var url=this.split('?')[1].split('&');
    this.result={};
    for(var i=0;i<url.length;i++){
        var val=url[i].split('=');
        this.result[val[0]]=val[1];
    }
    return this.result;
}
var temp= 'https://mp.csdn.net/mdeditor/81182420?name=12&sex="女"';
console.log(temp.parseQueryString())

你如何优化自己的代码?

  • 代码重用
  • 避免全局变量(命名空间,封闭空间,模块化mvc..)
  • 拆分函数避免函数过于臃肿
  • 注释

console.log( 8 | 1 ); 输出值是多少?

位运算 OR 由符号(|)表示,是直接对数字的二进制形式进行运算。8的二进制形式是1000,1的二进制形式是0001
答案:9

BOM 对象有哪些,列举window 对象?

1、window 对象,是JS 的最顶层对象,其他的BOM 对象都是window 对象的
属性;
2、document 对象,文档对象;
3、location 对象,浏览器当前URL 信息;
4、navigator 对象,浏览器本身信息;
5、screen 对象,客户端屏幕信息;
6、history 对象,浏览器访问历史信息;

写出以下代码的结果:

var bool = !!2; alert(bool);//true;
双向非操作可以把字符串和数字转换为布尔值。

将数字12345678 转化成RMB 形式如: 12,345,678

方法一:

//思路:先将数字转为字符, str= str + '' ;
//利用反转函数,每三位字符加一个','最后一位不加; re()是自定义的反转函数,最后再反转回去!
function toRMB(str) {
    var str = str + '';
    str = reverse(str);
    var tmp = '';
    for (var i = 1; i <= str.length; i++) {
        tmp += str[i - 1];
        if (i % 3 == 0 && i != str.length) {
            tmp += ',';
        }
    }
    return reverse(tmp);
}
function reverse(str) {
    var val = str.split('').reverse().join('');
    console.log(val);
    return val;
}

猜你喜欢

转载自blog.csdn.net/mangxi8200/article/details/81182420
今日推荐