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报错如

function showMsg(){

}

$("#btn_show").click(function(){

        showMsg();

})

未完待续。。。。。。。

你可能感兴趣的:(js 基础知识随笔)