js入口函数:
window.onload = function () {
// 执行代码
}
JavaScript 的 window.onload 事件是等到所有内容,包括外部图片之类的文件加载完后,才会执行。
1. js中的map()函数
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个新数组,它包含该函数的返回值,用法如下:
例:将数组中的每个元素求二次方,返回得到的新数组
function square(arr){
return arr.map(function(item){
return item*item;//item为遍历到的当前数组元素
});
}
2. 正则表达式
RegExp 对象有3个方法:test()、exec()、compile()
test():检测一个字符串是否匹配某个正则表达式,如果匹配成功,返回true,否则返回false;
exec():检索字符串中与正则表达式匹配的值,返回一个数组,存放匹配的结果;如果未找到,返回null;
compile():可以在脚本执行过程中编译正则表达式,也可以改变已有表达式。
注:match是支持正则表达式的String对象的方法,相应的方法还有:
search:str.search(reg);//查找指定字符在字符串中的位置
replace:str.replace(reg,replaceStr);//将匹配的字符用后面的替换,第二个参数可以传递为function,其返回值将替换指定的字符
function test1(str){
var reg1=/([a-zA-Z])\1/;//是否有连续重复的字母,分组的使用
var reg3 = new RegExp("abc",'i') ;
var reg2=/^\$\d{1,3}(,\d{3})*(\.\d{2})?$/;//美元格式
return reg1.test(str);//匹配成功返回true,否则为false
var arr=str.match(reg1);//匹配到的结果存入数组
/*
/xxx/g:全文查找匹配的全部字符
/xxx/i:忽略大小写
/(xxx)?/:括号中的条件满足0或1次,*为多次
*/
}
3. parseInt(),toString()
parseInt(str,num)//转为10进制,str为需转换的字符串,num为str的进制(如2、10)
//parseInt(11001,2);
num.toString(2);//将十进制的num转成二进制的字符串
4. arguments
function useArguments() {//返回实参之和
var sum=0;
for(var i=0;i<arguments.length;i++)
sum+=arguments[i];
return sum;
}
var args = Array.prototype.slice.call(arguments);//把实参转换成数组
Array.prototype.slice.call(arguments,1);//把调用方法的参数截取出来
function test(a,b,c,d)
{
var arg = Array.prototype.slice.call(arguments,1);
alert(arg);
}
test("a","b","c","d"); //b,c,d
为什么使用Array.prototype.slice.call(arguments, 1),而不使用 arguments.slice(1) ? 因为arguments不是真正的数组对象,只是与数组类似而已,所以它并没有slice()方法。
5. js里面没有函数重载的概念
以下第二个add将覆盖第一个,且y=NaN,因为调用参数不同,若将第二个add改为return n+10;则y,z输出均为11:
var m= 1, j = k = 0;
function add(n) {
return n = n+1;
}
y = add(m);
function add(n,m) {
return n = n + m;
}
z = add(m,5);
//NaN,6
var m= 1, j=1;
function add(n) {
return n = n+1;
}
y = add(j);
function add(n,u) {
return n = n +10;
}
z = add(m,12);
console.log(y,z);
//11,11
函数声明会提升,同名函数前面的会被后面的覆盖
7. fadeIn()和fadeOut()
与show()方法不相同的是,fadeIn()方法和fadeOut()方法只改变元素的不透明度.fadeOut()方法会在指定的一段时间内降低元素的不透明度,直到元素完全消失("display:none").fadeIn()方法则相反.
<script type="text/javascript">
$(document).ready(function(){
$(document).mousemove(function(e){
$("span").text("X坐标:"+e.pageX + ", Y坐标:" + e.pageY);
});
});
</script>
<p>鼠标当前坐标为: <span></span></p>
$('.div').mousemove(function(e){
var top = e.pageY+5;
var left = e.pageX+5;
$('#tip').css({
'top' : top + 'px',
'left': left+ 'px'
});
});
8. js中的闭包
- 自执行匿名函数
//这段代码输出的是10个10而不是期望的0到9,因为闭包内是对i的引用,然后函数执行时i已经变成了10
function f1(){
for(var i = 0; i < 10; i++) {
setTimeout(function() {
alert(i);
}, 1000);
}
}
f1();
//解决以上的问题可以采用自执行的匿名函数
function f2(){
for(var i = 0; i < 10; i++) {
(function(item) {
setTimeout(function() {
alert(item);
}, 1000);
})(i);
}
}
f2();
//这里的匿名函数将i作为参数,这里的item会有i的一个拷贝,
//而引用时是对item的引用,这就避免了上述的问题
当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!
(function(){
//这里忽略jQuery所有实现
})();
当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
去掉匿名函数括号必须要伴随将表达式赋值。
也就是(function(){alert(1)})()
应该是与
a=function(){alert(1)}()
等价,不能连a=都去掉。
9. 数组就是对象
- 对象不能用length返回其拥有的属性数量
例:
var arr=[];
arr[0]=0;
arr[1]=1;
arr.foo='c';
console.log(arr.length);//结果为2
-
var arr = [‘1’,‘2’] //这本质上是一系列操作:得到一个数组对象;调用了它的数组方法存入了一些数据,arr.length根据存入数据的数目被修改
-
arr.length,对arr对象的length属性进行一个访问
-
arr.foo = ‘hello’ 对arr对象创建一个属性,所以.foo 跟.length地位是并列的:就是arr的一个属性,同时arr的数组方法跟这些属性是毫不相关的
10. 跨域
- 只要 协议 、 域名 、 端口 有任何一个 不同, 都被当作是 不同 的域。
12. 块内声明函数
if (x) { function foo() {}}
函数声明的形式定义函数有声明提升的特性,也就是不论是否进入if(x),foo都定义了
if (x) { foo = function() {}}
函数表达式形式,foo前无var,所以foo为全局变量
正确声明方式:
if (x) { var foo = function() {}}
13. 下拉列表框值
<select name="a" size="1" id=”obj”>
<option value="a">1</option>
<option value="b">2</option>
<option value="c">3</option>
</select>
obj.options[obj.selectedIndex].text/*1*/
obj.options[obj.selectedIndex].value/*a*/
14. form表单中input元素的readonly与disabled属性
readonly = true
:页面上无法修改内容,但是可以通过JavaScript修改,内容会被提交
disabled = true
:无法修改内容,也不会被提交
15. var a = b = 5;
等价于:
var a=5;
b=5; //b声明为全局变量
16. 可用作javascript异步模式的编程的方法
回调函数;
事件监听;
发布/订阅;
Promises对象
17. 匿名函数具有全局性,this通常指向window
18. with,try catch,eval会改变作用域链,while不会
19. 转布尔值为false
在js中,只有0,-0,NaN,"",null,undefined
这六个值转布尔值时,结果为 false