(1)
js的里,var a=1,var b="10",如果是相加,则是优先拼接,而如果相减相乘相除则是直接算术运算。
(2)
比较a<A,是比较它们的AscII码的大小值。
(3)
前面加两个叹号,可以把任何类型变成布尔值,如var a=1,“!!a”的值为true。isNaN( )来测试是否为数字数据。
(4)
var a=prompt("请输入一个数字","321"),带两个参数,前者是提示文字区域,后者是框内的默认值,也有提示作用。用户输入的会赋值给a,但是要注意即使用户输入了数字,a也是一个字符串类型,所以如果输入了数字,则要再从字符串转换成数字类型。用a*=1就可以啦,字符串遇到乘还是会变成数字类型的。prompt是window底下的方法。可以window.prompt来调用。或者var a=prompt("请输入一个数字","321")*1,直接转换。
(5)
switch语句的switch就相当于“开关”的意思。
(6)
document.write(a+"<br/>"),这样的形式输出换行。
(7)
用!,进行布尔值的随意切换,如if(! isNaN(a)),这样可以方便我们写if条件语句。
(8)
date( )对象,如果用户输入了错误的日期,比如2月31日,用setFullYear,setDay等方式,就按照用户设置的时间去声明时间,则系统会自动容错调整为3月3日,于是将getMonth和getDay与用户输入的day和month做比较,如果有出入,则说明输入有误。
(9)
var a=new Date( ); a.setFullYear(2010); a.setMonth(7); a.setDate(22); var b=a.getDay( ); alert(b),可以用来查看2010年8月22日是星期几。
(10)
直接给数组设值,var a=new Array( ),a[2]=2,这个时候a.length的值为3,虽然里头确实只有一个元素,但要注意a[0]和a[1]其实都已经被赋值为undefined。a[a.length]=2(等价于a.push(2)),向末尾增加一个元素,比较酷的做法。
(11)
var a=[1,2,3],a.join("@"),结果是1@2@3@。concat是两个数组变成一个数组,join是一个数组变成一个字符串。而split()是将字符串劈开成数组。
(12)
测试性能,看代码运行了多久,是用两次getTime( )的值进行相减。如:
var a=new Date( );
var start=a.getTime( );
document.write(1);
alert((new Date( )).getTime( )-start); // 注意这里要重新new Date( )一次,而不能直接调用上面的a.getTime( ),那是获取以前的,否则结果会是0。
(13)
var a=new Array(2),a[0]=1,a[1]=2,如果直接alert(a)的话,结果是"1,2",注意中间用默认的逗号隔开。如果想把这个逗号替换,并转换为字符串形式,可以a.join("#"),这样结果就是“1#2”,并且已经是个字符串类型。
(14)
js的数组没有关联数组的概念,但a["v"]=2这样的形式其实也就是对象,是种json格式,var a={v : 2 }。
(15)
var a={v:2},虽然前面的v可带引号也可不带,但如果要使用js不允许的一些变量标识符号,借助引号是很有帮助的,如var a={"f-@d",2},这样可以把中折号,@写进去,可以用a[" f-@d " ]来访问。
(16)
Array是Object的扩展,只是比它功能多些,比如有它没有的length属性。
(17)
定义对象或者json格式的时候,不能写成 var a={ name:"wangjun", age:19;},仅仅错在一个地方就是结尾处不能加分号,否则会产生错误,正确写为var a={ name:"wangjun", age:19 }。
(18)
var a={
"name":"wangjun",
"age":19}
for(var i in a){
document.write(a["i"]+"<br/>");
}
// 只能用a["i"]这样的形式,而不能用a.i,因为系统会误认为是在访问a对象中一个名叫i的属性。。
(19)
var a=[
{
name:"wang",
age:16
},
{
name:"ming",
age:26
}
],这个时候要查姓名为ming的年纪,可以:
for(i=0;i<a.length;i++){
if(a[i].name="ming"){
alert(a[i].age);
}
}
(20)
var a="sring",a[4]返回g。一切皆对象,基本包装类型。
(21)
var a="abc",a.charCodeAt(0),结果是97,是a的ascii编码。返回编码。
如果var a="小明",注意这里就不再是ascii编码,而是unicode编码,而长度值会和ascii完全不一样,结果是23567。
(22)
var a= " abc def ";
a.replace("abc","ewc"); 旧在前,新在后
alert(a) // 这里不会任何变化,replace不会改变原有字符串,而要将改动过程赋值。如:
var a= " abc def ";
var b=a.replace("abc","ewc");
alert(b) //这里就能看到替换后的ewc def 啦
(23)
strsub( )与substring()实质结果是一样的,但参数不一样,前者开始索引+个数,后者开始索引和结束位置索引,但不包括结束位置字符本身,截取的结果2个都一样。
(24)
滚动的title,蛮有意思的:
<script type="text/javascript">
var s="我们都是好孩子".split(""); // 注意split里头即使没东西,也要加双引号,不能s.split( ),这样会错误。
function move( ){
s.push(s[0]); // 将数组第一个原素插到最后一个位置
s.shift( ); // 即时删除现有的第一个元素,保持数组的长度一致
document.title=s; // 赋给title,因为document包含head和body,而title又属于head
}
setInterval(move,1000);
</script>
(25)
var b=a.push(4),注意push还能返回push操作后当前数组的长度,如果有赋给一个变量的话。
(26)
<img src="1.jpg" title="图片">,转换成对象的形式是:
var a={
src:"1.jpg",
title:"图片"
}
(27)
<a οnmοuseοver="this.src='1.jpg'" id="f"></a>,这里的this别忘记。
var obj=document.getElementById("f"),然后for(i in a){ },可以遍历出<a>标签的所有属性内容,会有很多以前从来没见过的,不经常用,但系统内置的东东,可以研究研究它们。
(28)
innerHTMl标签内部的html代码,outerHTML返回包括本身。
(29)
目录相当于栈,内容相当于堆。null也是在栈中有个索引,只是在堆中没有内容。
(30)
b=2,直接赋值,则相当于var b=2,相当于声明了一个全局变量。
(31)
to.String( )是所有对象默认的方法,即将对象转成字符串,包括number,string,boolean都有这个方法。比如var a=123 a.toString( )返回的值就是123的字符串类型。其中数字转换的时候,还可以约定要转成几进制,比如:
a.toString(2),a.toString(8),a.toString(16),分别输出二,八,十六进制的字符串类型。
(32)
indexOf( )是返回某个字符在字符串中的位置,注意这里的O要大写,而typeof()是判断类型,这里的o不需要大写,要小写。伤不起。
(33)
var a="123A",然后将其整数部分提取出来。这个时候a*1的方法失效。Number(a)的方法失效,会返回NaN,只有parseInt和parseFloat可以搞定。如果var a="123A23",也还是返回123,后面的23不看。如果var a="A232",则会返回NaN,所以parseInt是从开头开始查找有没数字。parseInt和parseFloat和toString( )方法一样,也可以制定返回指定进制类型的数。parseInt("a",2),转为二进制。
(34)parseInt比parseFloat强的地方,在于它能看明白8进制或者16进制,比如 var a="018"; var b=parseInt(a);这里的返回值为1,因为0是代表八进制,所以忽略,而8进制中又不可能包含8,所以8也忽略,于是就返回1。如果改成var b=parseFloat(a),则返回18,不能理解是八进制。
(35)
要将null转为字符串,只能用String(null)的方法,var a=null,a.toString( )会报错。或者用null+"" 的方式。
null和undefined都不能调用toString( )或者其它属性,方法,因为本来就为空。
(36)
var a=[1,2,3]; a.shift( ); alert(a); 注意shift是整个把第一个元素删除,而delete(a)是将内容删除,位置还保留着,所以数组的形式为“,2,3 ”,最前面有个逗号,其效果相当于a[0]=undefined。
(37)
var a=new Date( ),Number(a)与a.getTime( )的结果是一样的,都返回距某个标准时间所过去的毫秒数。还可以用一种方法,即var a=+new Date( ),前面给个加号,这样可以马上转成Number类型。
(38)
var a=0;
labelfirst: // 这个起到标签作用,里头break的时候可以直接跳到最外层,而不是只结束子循环。
for( ){
for( ){
if( ){
break labelfirst;
}
}
}
(39)
所有的对象都是从new Object这个Object继承而来。
(40)
var a=new Boolean( false );
alert(!a); // 预期返回ture,结果却返回了false
这里问题比较特殊,因为这里false值也被看成一个对象,对象就是某个存在体,于是!a的时候就会得到false。
(41)
number,string都有大量方法,得益于它们都有个基本包装类型,对应着Number,String这些。比如一个普通的number类型,有toFixed( )这样的方法。string有charAt( ),indexOf( )这样的方法。这些方法的调用形式都很“对象”化,那是因为基本包装类型在起作用。
(42)
substring( )和slice( )的功能差不多,只是后者还能理解负值索引,前者不能,如:
var a="abcdefg";
alert(a.slice(0,-1));
alert(a); // 结果是abcdef,-1位置就是g,而又要删除本身,所以留下abcdef
(43)
还有个叫GLOBAL的对象,isNaN( )和parseInt( ),parseFloat( ),encodeURI( ),decodeURI( )都是它底下的方法。
(44)
encodeURI( ),会将url中的空格转化为%20。注意别写成encodeURL( ),是i的大写结尾。
encodeURIComponent( ),则不仅仅会转化空格,还会转化“/”,“:”等特殊字符。
(45)
注意到Math调方法,还需要提供Math对象,但number调toFixed()或者string调charAt( )这些方法的时候,都是不需要给出对象的,是因为它们都继承自GLOBAL对象,这是个全局对象,调用方法和属性时,不必显示写出它,而它自己又继承自Object。
(46)
(function(p){
alert(p);
})(10) 匿名函数用括号弄起来,会立即执行,还可以传参
注意这个相当于:
function a(p){
alert(p);
} 然后,a(10)
(47)
function a(a,b ){
alert(a+"\n"+b);
}
a(2,3);
// 这个换行不体现在html中,而是体现在源码中,可以在弹出窗口中看见,一定要理解html中换行,只能用<br/>,而\n所导致的换行,只能在源代码中看见。
(48)
var a=function( ){
alert(this==window) // 感觉好象是a来调用,this应该是a,其实不是,应该是window,转下形式就很清楚
}
a( );
相当于function a( ){
alert(this==window);
}
(49)
BOM的核心对象是window,DOM的核心对象是document。document属于window之下。window.document.write( ),document再包括html,html又包含head和body。因为document.documentElement就是html。根元素节点是html。
(50)
ie下判断窗口和屏幕之间距离用window.screenLeft和window.screenTop,只有位置的方法,没有提供调整大小的方法。FF的方法是window.screenX和window.screenY
FF还提供以下方法:
innerWidth和innerHeight是可视区域的宽和高。
outerWidth和outerHeight是可视区域的宽和高。
(51)
moveBy(100,100)是按多少量来偏移,moveTo(100,100)是移动到特定的位置。
(52)
location除了href属性外,还有reLoad( )方法,这个方法可带参数,如果参数为true,则是一个强制刷新行为,如果是false。注意location要小写。
(53)
关于getAttribute取class属性的问题
<p class="f" id="f">我们都是好孩子</p>
FF下取class的值可以:document.getElementById("f").getAttribute("class")
IE下只能:document.getElementById("f").getAttribute("className")
(54)
document.getElementsByTagName("head")[0],这样就不用给head加个id啦。
(55)
<p class="f" id="f"><a>你</a>我们都是好孩子</p>
要取到“你”这个字
alert(document.getElementById("f").firstChild.firstChild.nodeValue);
最开始的firstChild获取到<a>你</a>,然后这个本身是个元素节点,而它就包含了一个文本节点,于是取文本节点的值用nodeValue。
<p class="f" id="f">我们都是好孩子</p>
不可直接,document.getElementById("f").nodeValue,因为元素节点没有文本内容,文本节点才有,而文本节点又是元素节点的子元素。
(56)
null是空,是种对象。而undefined,是未定义,见于未声明的变量或者对象未声明的属性。但是奇怪于访问一个未声明的全局变量,如alert(a)会提示错误,而非给值undefined,这里为什么不看成是window对象的一个属性呢?
(57)
function a( ){
return arguments.callee; 这个返回函数本身
}
alert(a( ));
(58)