北风网javascript教程听课笔记

(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)

 


 










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值