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;
}