js一些题目

1. 请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″;

var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2";        
var obj = parseQueryString(url);        
function parseQueryString(argu){            
	var result = {};            
	var str = argu.split('?')[1]; //key0=0&key1=1&key2=2            
	var temp = str.split('&'); //["key0=0", "key1=1", "key2=2"]            
	for(var i = 0; i < temp.length; i++){                
		// key0=0 ["key0", "0"]                
		var temp2 = temp[i].split('=');                
		// 为result添加新属性,属性名为temp2中0位置的元素值,属性值为temp2中1位置的元素值                
		result[temp2[0]] = temp2[1];            
	}            
	return result;        
}

2. 请给出异步加载js方案,不少于两种

//1、只能IE用(IE9以下),等到dom文档完全解析完才会被执行
    <script src="01.js" defer></script>
//2、async 加载完就执行 w3c标准方法
    <script src="01.js" async></script>
//3、创建script,插入到DOM,加载完毕后callback  按需加载
    <script>
        function loadScript(url,callback){
            var script = document.createElement('script');
            script.type="text/javascript";
           if(script.readyState){
                script.onreadystatechange = function(){
                    if(script.readyState == 'complete' || script.readyState=='loaded'){
                        callback || callback();
                    }                    
                }
           }            
            script.src = url;
            document.head.appendChild(script);
        }
     </script>

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

//创建一个空数组,用来放10个数字          
	var array = [];            
//定义一个10~100的随机数的函数            
	function getRandom(num1,num2){                
		var temp  = num2 - num1 + 1; //这里面的加1是为了能够取到100                
		var res = Math.floor(Math.random() * temp  + num1); 
          	return res;            
         }            
//遍历出10个随机数,并把十个数用push放法放到新定义的数组里面            
       for(var i = 0; i < 10; i++){                
               array.push(getRandom(10,100));            
       }            
//sort方法进行排序            
       array.sort(function(a,b){                
       	        return a - b; //升序            
    	})            
//打印数组            
console.log(array);

4. 有如下JavaScript程序:

function add(m){
    return function b(n){
        return n+m++
    }
}
var add1 = add(070);
var add2 = add(050);
console.log(add1(010));
console.log(add2(010));

分析输出的结果为:64 48

 js将0开头的数默认为8进制的数
 (070).toString(8) = 56
 (050).toString(8) = 40
 (010).toString(8) = 8
 56+8    40 + 8

5. 运行以下程序

  var m= 1, j= k = 0; 
  function add(n) { 
        return n = n+1; 
  } 
   y = add(m); 
   function add(n) { 
        return n = n + 3; 
    } 
z = add(m); 

y和z的最终结果为: 4 4

 预编译 
 1.    程序执行前,创建活动对象AO,
 2.    将var关键字声明的变量作为AO对象的属性名,赋值为undefined,有重名的不新增属性名,直接替换值;
 3.    将形参和实参统一
 4.    检测function声明的函数,函数名作为AO对象的属性名,赋值为函数体,如果和变量重名的,不新增属性名,直接替换值

6. 数组的排序(必须使用冒泡排序)

function boolstort(arr){           
	for(var r = 0; r < arr.length; r++){               
		for(var i = 0; i< arr.length; i++){                   
			if(arr[i] > arr[i+1]){                       
				arr[i] = [arr[i+1],arr[i+1] = arr[i]][0];                   
			}               
		}           
	}       
}

7. 什么是默认行为?什么是冒泡?如何禁止
默认行为: 浏览器的一些默认的行为。例如:点击超链接跳转,点击右键会弹出菜单,滑动滚轮控制滚动条
冒泡:由内向外,依次出发各级父元素绑定的事件处理函数

// 阻止冒泡事件
function stopBubble(e){
 	if(e && e.stopPropagation){
  		e.stopPropagation();
 	}else{
  		window.event.cancelBubble = true;
 	}
}
// 阻止默认空格键和按方向键时也会向下滚动事件
function stopDefault(){
 	if(e && e.preventDefault){
  		e.preventDefault();
 	}else{
  		window.event.returnValue = false;
 	}	
 	return false;
}
 //此jquery既阻止默认行为又停止冒泡        
 // $("#div1").on('click',function(){        
 //     return false;        
 //});

8. 如今有一个ul,里面有十亿个li,要求点击li触发事件,弹出对应li的内容

var ul = document.getElementsByTagName('ul')[0];
ul.οnclick = function(e) {    
	var event = e || window.event;    
	var tar = event.target || event.srcElement;    
	if(tar.tagName.toLowerCase()==="li")      
		alert(tar.innerText); 
	}	

9. 运行test()和new test()的结果是什么?

var a = 5;
function test() {
	a = 0;
	alert(a);
	alert(this.a);
	var a;
	alert(a);
}
test()  //0 5 0  
new test() //0 undefined 0

主要的区别就是this的指向变了直接调用test()时,this的指向是window或global。
使用new调用newtest()时,this的指向变成被实例化的对象。
10. 有字符串“aaabbbcccdddeefggaa”,转换成连续不重复的字符串eg:abcdefga

function fun(str){            
	return str = str.replace(/(\w)\1+/g,'$1');        
}    
var str = fun('aaabbbcccdddeefggaa');    
console.log(str);

11.数据格式JSON转换为字符串,以及把字符串转换为JSON的方法
JSON.stringify() json➡ string
JSON.parse() string ➡ json

12、call和apply的区别?
apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与 apply()方法相同, 第二个传递给函数的参数必须列举出来。

13.下面函数执行的结果是什么?
Lydia is 21,function函数体

const person1 = { name: "Lydia" };
        function sayHi(age) {
            console.log(`${this.name} is ${age}`);
        }
        sayHi.call(person1, 21);
        sayHi.bind(person1, 21);

使用两者,我们可以传递我们想要this关键字引用的对象,但是call方法立即执行!bind方法返回函数的拷贝值,带有绑定的上下文,他不会立即执行

14.下面代码的输出的是什么?
{name: “Lydia”, age: 21} [“name”]

const person = { name: "Lydia" };
Object.defineProperty(person, "age", { value: 21 });
console.log(person);  // {name: "Lydia", age: 21}
console.log(Object.keys(person));  // ["name"]

defindProperty方法,可以给对象添加一个新属性,或修改已存在的属性。默认属性不可枚举
对象的四个特征
Writable当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符改变。 默认为 false。
configurable 当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。 默认为 false。
enumerable 当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。 默认为 false。
value 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。 默认为 undefined。

15.下面代码的输出是什么?
First Third Second

const foo = () => console.log("First");   
const bar = () => setTimeout(() => console.log("Second"));
const baz = () => console.log("Third");

setTimeout是异步,所以一定是在最后执行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值