js 基础知识随笔
js 比较运算, 如果字符串和数值比较会先将字符串转为数值再进行比较
如果是对象和字符串比较则会调用对象的valueOf()方法
null==undefined
js 中label使用 提高性能
start:for(){
for(){
break start;
}
}
js 垃圾回收
1、标记清除
先将全部变量进行标记,再取消现环境的变量及由变量引用的变量,再将没有取消的变量清除分配的内存
2、引用计数
在循环引用中容易造成内存溢出
可手动执行垃圾回收
collectGarbage
确定占用最小的内存使页面拥有更好的性能,可以在变量使用后手动至为null
js中 function和new function的区别
new function返回的是对象,当function中有return的时候,new function返回的是对象,function根据return的类型不同返回的不同,如果返回的是对象则为对象如果返回的是字符串则为字符串,new function可获取this对象,function则不会如:
var a ={"AAA":"ssss''}
a.AAA与a["AAA"]区别,用中括号可以通过变量的方式访问如 var keyName = "AAA" ,a[keyName],或者当key为关键字或含有空格或.标识等时用中括号获取
js数组
Array.length 非只读,可以根据设置length动态添加或修改数组尾值
数组栈的方式存储,后进先出 last in first out
push 再数组后面添加新的元素
pop 获取最后一个元素
shift 获取第一个元素
unshift 在数组最前面添加元素
concat 复制原数组后创建新的数组
slice 选择性赋值新建新的数组,传一个或两个参数,表明将要复制的原数组位置
splice 非常强大的方法,对数组任意位置进行删除,插入,更换
splice(0,2)删除数组前两个元素
splice(2,0,"aa","bb","cc")在数组第二个位置后面,“删除0个元素”,并在后面添加“aa”“bb”“”“cc”元素
splice(2,1,"aa","bb")在第二个元素后面,删除1个元素并插入“aa”“bb”
数组的indexOf发现个有意思的,indexOf在查找匹配时遵循的是===,也就是说元素必须完全一致,包括了指向的地址如
var ob = {"aa":"aa"};
var arrTest1 =[ {"aa":"aa"}];
var arrTest2 =[ ob];
arrTest1.indexOf(ob);//-1
arrTest2.indexOf(ob);//0
数组的五大迭代方法 都是传递三个参数分别为,节点元素,节点位置,循环数组
every(function(value,index,arr){
//如果此函数对每一项都返回true;则every方法返回true
})
some(function(value,index,arr){
//如果此函数对任意一项都返回true;则every方法返回true
})
forEach(function(value,index,arr){
//每一项都执行该函数,无返回值
})
filter(function(value,index,arr){
//过滤筛选将该函数返回true的值进行filter返回(数组返回)
})
map (function(value,index,arr){
//将此返回的返回值生成新的数组有map返回
})
reduce 缩小数组方法,传递四个参数,第一个数组值,第二个数组值,循环的位置,数组对象
每次迭代都会将结果作为第一个数组值传递到下一次迭代中
function 两个属性,length 获取方法需要的参数个数
String 三个方法
slice(param1,param2)//第一个参数开始位置,第二个参数结束位置
subString(param1,param2)//第一个参数开始位置,第二个参数结束位置
substr(param1,param2)//第一个参数开始位置,第二个截取几个
参数为负数时 slice将参数与字符串长度相加
subString 将负数都转为0
substr 将第一个参数与字符串长度相加,第二个参数转为0
替换 js中的replace方法并没有像java中replaceAll方法想要达到全部替换可以用正则/g
如
var hello = "hello word";
hello.replace(/o/g,'w');
也可以用一些特殊的字符序列
$1表示最新匹配到的字符串
var test = 'ABC,CBC,DBC';
test.replace(/(.BC)/g,'都是BC($1)');
replace第二个参数也可以传方法,方法捕获组的匹配项,参数位置,原字符串
如
var str= 'abcdefg';
str.replace(/[a d&]/g,function(match,pos,str){console.log(str+'原字符串'+match);return '替换为'})
采用块级作用于可以降低闭包占用的内存问题,减少命名冲突及减少作用域链
location.href
location.assign
location.replace区别
href实际上也是调用的assign,href和assign会产生历史记录,replace不会产生历史记录,也防止了gohistory
jQuery 对象和dom互相转化
通过jQuery 获取对象var jele = $('#elem')与dom获取的对象不同,
var delem = document.getElementById("elem"),因此两者不能互用对象属性及方法,
两者互相转换方式如下
jele[0] == delem
$(delem) == jele
h5 中innerHtml虽然很方便,但多次使用会降低性能,因为每次使用innerHtml或outHtml就会创建一个新的解析器
在绑定事件中尽量用js绑定事件而不用html事件处理,这样可以避免当js没有加载完用户点击造成当js报错如
<input id="btn_show" type="button" onclick="showMsg()">
function showMsg(){
}
<input id="btn_show" type="button">
$("#btn_show").click(function(){
showMsg();
})
未完待续。。。。。。。