题目一 : 统计字符串中涌现次数最多的字符
eg : var s = "abcdefghijklabcdaaaefadca"
; // 个中a涌现次数最多,7次
拿到这个题目,会怎么做呢?
起首我想到两种思绪:
暴力查找,一个一个元素拿出来,再循环,获得次数放入json键值对中,再比较大小
找到一个删除一个,应用正则表达式替代,长度之差就是其重复的次数
暴力查找:
var s = "abcdefghijklabcdaaaefadca";
var json = {};
var Max = {
key:"",
value:0
};
var arr = s.split("");
for(var i=0;i<arr.length;i++){
json[s[i]] = 0;
for(var j=0;j<arr.length;j++){
if(s[i] == arr[j]){
json[s[i]]++;
}
}
}
for(prop in json){
if(json[prop] > Max.value){
Max.key = prop;
Max.value = json[prop]
}
}
console.log(Max); //得出准确效果
正则法:
var s = "abcdefghijklabcdaaaefadca";
//用于寄存各字母涌现的次数
var json = {};
//用于寄存涌现次数为最大值的字母
var Max = {
key:"",
value:0
};
//正则替代,长度之差就是涌现的次数
while(s){
var len1 , len2;
len1 = s.length;
var first = s.charAt(0);
s = s.replace(new RegExp(first,"g"),'');
len2 = s.length;
json[first] = len1-len2;
}
//找最大值
for(prop in json){
if(json[prop] > Max.value){
Max.key = prop;
Max.value = json[prop]
}
}
console.log(Max); //得出答案
这个题目另有一个好要领:
var s = "abcdefghijklabcdaaaefadca";
var json = {};
var Max = {
key:"",
value:0
};
for(var i=0;i<s.length;i++){
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1; //不存在就自动建立,
}else{
json[str.charAt(i)]++; //假如已存在就加1.
}
}
console.log(json);
//找最大值
for(prop in json){
if(json[prop] > Max.value){
Max.key = prop;
Max.value = json[prop]
}
}
console.log(Max); //得出答案
这类算法时候复杂度为O(n),能够说是很简朴了!
题目二 : 求下面的输出值
function Show(){
getName = function(){
console.log(1);
}
return this;
};
Show.getName = function(){
console.log(2);
};
Show.prototype.getName = function(){
console.log(3);
};
var getName = function(){
console.log("4");
}
function getName(){
console.log(5);
};
求这些题目的解:
1、Show.getName();
2、getName();
3、Show().getName();
4、getName();
5、new Show.getName();
6、new Show().getName();
7、new new Show().getName();
这道题目考核的是Javascript基本,
起首要邃晓JS实行历程:
先提拔(先提拔函数,再提拔变量,假如名字一样,变量提拔会掩盖函数提拔)
再实行,假如碰到闭包建立
在闭包空间中重复1和2
先定义(提拔),在实行
变量提拔
函数提拔
本题目解答以下:
形如
func.method(函数名.属性)
,函数也是对象
,发明Show.getName()有定义
,就实行要领属性,输出2依据JS实行历程,
先提拔函数getName(),再提拔变量getName , 同名掩盖
,就晓得变量getName掩盖了其同名函数,实行变量getName
,效果是 “4”形如
func().method()
,意义是先实行 func() , 由 func() 的返回值实行method要领
,所以先要晓得 func() 返回值是什么? return this;this指什么呢? 谁挪用指向谁,func是全局挪用 , 所以this指向window
,Show()
函数实行后,内里把getName
的定义该变了,所以,window.getName()
输出是 1getName()
, 在当前环境等同于window.getName()
,输出是 1new Show.getName()
先实行show.getName()输出2 在new一下new Show().getName()
运用了new关键字,是把函数show当成了组织器,此时return没有作用,getName在组织器里没有,找原型对象 输出 3new new Show().getName()
就是在第六问基本之上输出 3 以后,在new一个
javascript一切的函数都能够运用 new func()关键字,示意天生一个对象。这点明白了,明白上面的就简朴
Javascript 简朴观点
javascript的typeof返回哪些数据范例
object , number , function , boolean , undefind , string
检测数组的几种要领 , 检测obj是不是是数组范例
Array.isArray(obj);
obj instanceof Array
arr.constructor.name
toString.call()
传统事宜绑定和相符W3C规范的事宜绑定有什么区分?
传统事宜绑定:
<div onclick=””>123</div>
<script>
div1.onclick=function(){};
</script>
<button onmouseover=””></button>
假如说给同一个元素绑定了两次或许屡次雷同范例的事宜,那末背面的绑定会掩盖前面的绑定
不支撑DOM事宜流 事宜捕捉阶段è目的元素阶段=>事宜冒泡阶段
相符W3C规范的事宜绑定的体式格局 addEventListener/attachEvent
A、非IE浏览器:addEventListener
假如说给同一个元素绑定了两次或许屡次雷同范例的事宜,所以的绑定将会顺次触发
支撑DOM事宜流的
举行事宜绑定传参不须要on前缀
addEventListener(“click”,function(){},true);//此时的事宜就是在事宜捕捉阶段实行
第三个参数:代表是不是在捕捉阶段实行,默认值是false
ddEventListener(“click”,function(e){})
addEventListener(“click”,function(){},false) 事宜在冒泡阶段实行
B、IE浏览器
ie9最先,ie11 edge:addEventListener
ie9之前 ie8:attachEvent/detachEvent
举行事宜范例传参须要带上on前缀
dom1.attachEvent(“onclick”,functioin(){});
这类体式格局只支撑事宜冒泡,不支撑事宜捕捉
call和apply的区分
call和apply雷同点:
都是为了用一个本不属于一个对象的要领,让这个对象去实行
toString.call([],1,2,3)
toString.apply([],[1,2,3])
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
区分:call第二个参数最先接收一个参数列表
apply第二个参数最先接收一个参数数组
jQuery框架中$.ajax()的经常使用参数有哪些?
type
范例:String
默认值: “GET”)。要求体式格局 (“POST” 或 “GET”), 默以为 “GET”。注重:别的 HTTP 要求要领,如 PUT 和 DELETE 也能够运用,但仅部份浏览器支撑。
url
范例:String
默认值: 当前页地点。发送要求的地点。
success
范例:Function 要求胜利后的回调函数。
参数:由服务器返回,并依据 dataType 参数举行处置惩罚后的数据;形貌状况的字符串。
这是一个 Ajax 事宜。
options
范例:Object
可选。AJAX 要求设置。一切选项都是可选的。
async
范例:Boolean
默认值: true。默认设置下,一切要求均为异步要求。假如须要发送同步要求,请将此选项设置为 false。
注重,同步要求将锁住浏览器,用户别的操纵必需守候要求完成才能够实行。
beforeSend(XHR)
范例:Function
发送要求前可修正 XMLHttpRequest 对象的函数,如增加自定义 HTTP 头。
XMLHttpRequest 对象是唯一的参数。这是一个 Ajax 事宜。假如返回 false 能够作废本次 ajax 要求
。
cache
范例:Boolean
默认值: true,dataType 为 script 和 jsonp 时默以为 false。设置为 false 将不缓存此页面。