一、定义js代码
<script type="text/javascript"> </script> <script type="text/javascript" src="文件名字"> </script>
二、变量声明及赋值
var t1=123;//声明变量(全局) var t2 = "test"; //局部变量 function test3(){ t3 = "test"; //全局变量 alert("--"+t3) }
一道js面试题
var t1=123; //在全局和局部有重名的变量 //执行函数会使用局部变量 function test(){ alert(t1);//undefined var t1=234; alert(t1)//234 } test(); alert(t1);//123
三、JS调用方式
1、直接调用
<script type="text/javascript"> test01(); function test01(){ alert("test"); return false; } </script>2、事件调用
<input type="button" value=test οnclick="test01();">3、伪协议调用
<a href="javascript:test01();" >test</a>
ps:一个小技巧(在超链接中调用js但不跳转)
<a href="javascript:void(0)" οnclick="test01();">gaga</a> <a href="http://www.baidu.com" οnclick="return test01();">gaga</a> function test01(){ alert("test"); return false; }
四、js数据类型
变量是没有类型的,数据是有类型的。常用的有如下6种类型:
undefined未定义 (声明了变量但从未赋值 )
boolean布尔型 (true,false)
boolean 的定义方式:
var t = Boolean(1);//得到true
字符串string (单引号、双引号均可)
数值number:包括整数和小数,NaN(Not a Number),Infinity, -Infinity
1/0 得到 Infinity
-1/0 得到 -Infinity Number('test') 得到NaN 表示不是数字的数字类型
对象object null空 (赋值为null) null 也是一种Object
五、数据类型的转换
1、Number(mix)
如果是布尔值,true和false分别被转换为1和0
如果是数字值,返回本身
如果是null,返回0.
如果是undefined,返回NaN。
如果字符串中只包含数字,则将其转换为十进制(忽略前导0)
如果字符串中包含有效的浮点格式,将其转换为浮点数值(忽略前导0)
如果是空字符串,将其转换为0
如果字符串中包含非以上格式,则将其转换为NaN ‘ssd2342df’
2、String()
如果是null,返回”null”
如果是undefined,返回”undefined”
3、Boolean()
alert(Boolean(0)) alert(Boolean(false)) alert(Boolean(null)) alert(Boolean(undefined)) alert(Boolean(NaN)) alert(Boolean(""));//全是false,其他事true。特别是对象,是true如下 alert(Boolean(new Date()))
六、js中的比较
==表示弱等号,只是比较值,不比较类型
alert(true=="true");//false String Number Boolean 这三种数据之间比较,如果两边不是number类型的会先转化成Number类型。本题true转化为1,“true”转化为NaN
alert(NaN==NaN);//false NaN是唯一一个和自己都不想等
alert("123"==123)//true
'' == '0' //false 两边数据类型相同,则直接比较值
var t = {};//json 对象
alert({}=={});//false 比较地址
alert([]==[])//同上
alert([1]==1)//true 对象与Number、Boolean、String比较的时候,会调用ValueOf方法,没有就调用toString方法,[1]的valueOf方法返回1,所以为true。但是alert([1,2].valueOf())会得到1,2
alert(!{} == {} )//false 左边:要进行boolean运算要先将对象转化为boolean类型的值,对象不再六中情况之内为true,在进行非运算得到false。右边得到字符串。两边在转化为Number类型,这是左边是0,右边是NaN
alert(![]==[])//true 左边[]转化为Boolean得到true,非一下为false。右边得到空字符转。两边在转化为Number的0=0
alert(null==null)
alert(null==undefined)//这两种是想等的,null与其他类型的比较是不等的
===是强等,要求数据类型和类型都相同
规则总结
== 弱等 隐式转换
Boolean String Number三种数据之间比较
X==y (x,y 数据类型一样 ,比较值)
X和y不一样
X和y 隐式转换为number再做比较
true==”true”//false
NaN==NaN//false NaN和自己都不相等
Null,undefined 和其他比较不等
X==y 比较的时候如果其中出现了一个object
Obj 有valueof直接调用得到值后比较 没有调用toString();
比较规则回到前面
{}=={}
[]==[]
!{}=={}//false
![]==[]//true
七、js中的控制语句
switch语句
switch (expression){ case const1: 语句块1; break; case const1: 语句块2 …… default: 语句块N }if语句
if(t==123){ alert("相等") } if(t===123){ alert("gaga") }for循环(while与java一样不再写了)
var t=[1,2,3,new Date(),{},"test"]; for(var i=0;i<t.length;i++){ alert(t[i]); } for(var t1 in t){ alert(t[t1]); }
八、数组
1、数组长度随时可变!随时可以修改!我们可以通过修改数组的长度清空数组。
2、Array.length获得数组长度
3、
var arr01=[1,2]; alert(arr01.join("-*-")) 得到1-*-2
4、
arr01.unshift("test"); //从最前面插入数组 alert(arr01.shift())//获取数组最前面的元素
5、
arr01.push("test")//将元素添加到数组最后的位置 alert(arr01.pop())//获取数组最后的元素
九、js函数
1、函数传递声明及传递参数问题(D:\TecSty\笔记\JS\testjs02day\testfunc.html)
//方法1 var t = function(b1,b2){ alert(b1+"-"+b2) } //方法2 function test2(t){ alert('blabla'); } t(123,123,123);//调用的时候传递多少参数都没有关系,形参的个数只是说明了函数想接受的参数的个数,另外js函数的参数实际存储在arguments数组里面
2、js中函数也是一个对象(D:\TecSty\笔记\JS\testjs02day\testfunc.html)
function test2(t){ t(); } var t2 = function(){alert("test")}; test2(t2);
3、js执行顺序问题(D:\TecSty\笔记\JS\testjs02day\testfunc02.html)
var add=function(a){ alert(a+100); } 预加载 function add(a,b,c){ alert(a+b+c) } function add(a,b){ alert(a+b); } add(123,123,123);//无论var add=function(a)放在哪个位置,都会调用这个函数,因为以下面的当时声明的函数会进行预加载,在正式执行的时候,add这个变量还是会指向以第一中方式定义的函数。从这里还可以看出js没有函数从在的概念
ps:关于预加载的一个题目
<script type="text/javascript"> function f(){ return 1; } alert(f()); var f = new Function("return 2;"); alert(f()); var f = function(){ return 3; } alert(f()); function f(){ return 4; } alert(f()); var f = new Function("return 5"); alert(f()); var f = function(){ return 6; } alert(f()); </script> //答案是 4 2 3 3 5 6
4、模拟函数重载
function add(){ var l1 = arguments.length; if(l1==2){ return arguments[0]+arguments[1] }else if(l1==3){ return arguments[0]+arguments[1]+arguments[2]; }else{ alert("参数个数不对") } } //这样add函数可以处理各种参数列表的函数
5、函数定义的本质
var f1 = new Function("x1","x2","alert(x1+x2)"); //这就是f1函数定义的本质,前两个是参数,后面的是函数体
6.使用变量指向对象的方法
var f1 = new Function("x1","x2","alert(x1+x2)"); var a = new function(){} //方法3 function getChildElements(faid){} var a = getChildElements; a('picContainer');