Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880992
  • 博文数量: 372
  • 博客积分: 10063
  • 博客等级: 中将
  • 技术积分: 4220
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 11:36
文章分类

全部博文(372)

文章存档

2012年(372)

分类: 虚拟化

2012-04-08 18:51:24

javascript 学习笔记
 
特殊数据类型是: * Undefined
    var a;//声明一个变量,但没有对其赋值
    alert(a);//但它仍然有值的,它的值为undefined
    alert(b);//但注意,输出一个未定义的变量将出现错误,而不是输出undefined
NaN是一个特殊的值,含义是"Not A Number"-不是一个数字,当将其它值转换成数字失败时会得到这个值
    var str ="some string here!";
    var num = 123;
    alert(str*num);//将输出NaN,因为乘法运算符只能针对数字,所以进行运算时计算机会将字段串转换成数字
Bool类型转换
    var str = "some string";
    alert(!!str);//true,因为非运算符是针对布尔值进行运算的,所以将其它类型转换成布尔值只须将其连续非两次
    str ="";
    alert(!!str);//输出false,只有空字符串转换成布尔值时会是false,非空字符串转换成布尔值都会返回true
    var num =0;
    alert(!!num);//false
    num=-123.345;
    alert(!!num);//true,除0以外的任何数字转换成布尔值都会是true
    //还有一个非常重要的是,空字符串转换成数字将会是0
    alert(""*1);//输出0
获取变量类型 typeof 运算符
使用window.prompt可以弹出包含输入框的窗口,用户输入的内容将是此函数的返回值
内置对象Math与Date
Date对象像一个时光机
    var d = new Date();//Date对象需要创建
    Date 对象能够表示的日期范围约等于 1970 年 1 月 1 日前后各 285,616 年。
    alert(d);//直接输出这个对象,将会得到一个表示时间的字符串
    这个对象有一些方法,可以用来获取时间的各个部分
    alert(d.getYear());//获取年,//个人测试显示有点问题,待验证
    alert(d.getFullYear());//始终返回年份的4位数表达方式
    alert(d.getMonth());//返回月份,注意,月份是从0开始计数的,所以1月时将返回0
    alert(d.getDate());//返回今天几号
    alert(d.getDay());//返回今天星期几,星期天是0,星期1是1....
    alert(d.getHours());//返回小时
    alert(d.getMinutes());//返回分钟
    alert(d.getSeconds());//返回秒
    alert(d.getMilliSeconds());//返回毫秒//个人测试不支持1次
    alert(d.getTime());
    返 回一个整数值,这个整数代表了从1970年1月1日开始计算到Date对象中的时间之间的毫秒数日期的范围大约是1970年1月1日午夜的前后各 285616年,负数代表1970年之前的日期我们不但能从中获取时间值,还可以设置时间值与那些getXXX方法对应的设置时间的函数仅仅是将get改 成set
    var d = new Date();
    d.setFullYear(1690);//设置年份为1900
    alert(d.getFullYear());//返回1900
    alert(d.getTime());//输出的值是负的,这验证了上面所说的getTime()返回值
    setXXX这样的方法有个最大的好处就是如果我们设置了错误的值,脚本并不会出错,但日期会自动更正
    记住,月份是从0开始计数的
数组与对象
    Array和Date一样,也是一个内置对象,需要使用new运算符创建
    var arr = new Array();
    JavaScript中数组长度会自动增长,并且length属性会自动更新
    arr = new Array(6);//将得不到预期效果,因为这是在声明一个长度为6的空数组
    还可以使用数组字面量的方式
    arr = [];//一个空中括号几乎是等价的但更灵活和简便
    数组中可以混合存放字符串,数值,布尔值...,几乎所以类型的值,包括数组
    arr = new Array(1,0,true,"some string",new Array("a",3));//第五个元素放的是一个数组
    alert(arr[4]);//输出"a",3
    alert(arr[4][0]);//输出"a"
    向数组中添加,删除元素(push,delete)
    arr.push(a);//push方法将元素添加到数组未尾
    arr.push("a","b");//可以一次添加多个元素
    利用数组长度自动增长的特性
    arr[arr.length]="new element";
    使用delete与下面的语句效果一样
    arr = ["#","$","%"];
    alert(arr);
    arr[2]=undefined;//undefined是一个值
    alert(arr);
    join方法,返回数组中的所有元素以指的分隔符间隔的字符串
    数组和对象是相通的
    var arr = new Array();
    var obj = new Object();
    alert(typeof arr);//object
    alert(typeof obj);//object
    数组可以使用字符串下标的
    var person = new Array();
    person["age"] = 18;//注意,中括号里的下标是一个字符串,所以需要使用引号
    person["weight"] = "123kg";
    person["height"] = "170cm";
    person["arm"] = 2;
    person["leg"] = 2;
    而对象也可以使用类似语法访问它的属性
    var obj = new Object();
    obj.property = "some data";
    alert(obj["property"]);//"some data"
    //当然也可以使用数字下标
    obj[1]=123;
    alert(obj[1]);//123
    alert(obj.property);//"some data"
    alert(obj.length);//但与数组不同的是,它没有length属性,输出undefined
    与数组字面量相对应的,也有对象字面量的声明方式
    var obj = {
        a:123,//这里的a,b等同样是对象的属性名
        b:456 //注意,最后没有逗号
    };
    还可以这样写
    obj = {
        "a":345,  //虽然如果用引号引起来就可以使用空格等不符合变量命名规范的字符,但强烈不推荐
        "b":333 
    };
    for.. in...循环出现了 (对于研究对象,for in循环太有用了)
String对象以及一些用于字符串的方法和属性
    str = new String("some string here");
    //表面上看,这和直接创建的字符串是一样的效果
    str = "some string here";
    但由于使用new String();所以创建出来的是对象
    var str = new String();
    alert(typeof str);//object
    //因为是对象,所以自然有很多属性和方法
    字符串本身也存这样的方法
    有很多用于处理字符串的方法以及一些属性
    •length 属性,返回字符串的长度
    •indexOf 方法,返回字符串内第一次出现子字符串的字符位置
    •lastIndexOf 方法,返回字符串中子字符串最后出现的位置
    •charCodeAt 方法,返回一个整数,代表指定位置上字符的 Unicode 编码
    •fromCharCode 方法,从一些 Unicode 字符值中返回一个字符串
    •replace 方法,进行文字替换,返回替换后的字符串的复制
    •substr 方法,返回一个从指定位置开始的指定长度的子字符串
    •substring 方法,返回位于 String 对象中指定位置的子字符串
    •toLowerCase 方法,返回一个字符串,该字符串中的字母被转换为小写字母
    •toUpperCase 方法,返回一个字符串,该字符串中的所有字母都被转化为大写字母
    •split 方法,把字符串分割为字符串数组。
Script标签与访问HTML页面
    this对象是一个一直存在的一个对象,它不能被声明(this是关键字).这里,this就是指"这个",指这个标签!对于HTML中的元素,JavaScript会自动将其解析成一个对象.
     
    推荐将script放在head部分!那么,这就要用到另一个事件onload
     window.onload = initAll;//将所有代码写在一个函数之中,然后注册到window对象的onload事件属性上
     //window表示窗口对象,只要窗口打开,它就始终存在,当页面加载完成后,会触发window对象上的onload事件
     function initAll() {
        var img = document.getElementById("myImg");
        img.onclick = myFn;
        function myFn() {
            alert("图象加载完成了!");
        }
    }
    这样,代码就不出错了,不管将脚本放在什么位置,initAll只有当页面加载完成后才会被执行
访问HTML页面:HTML DOM
    HTML DOM将整个页面当成一个document对象,HTML里的标签都要通过document对象来访问.而文档中的每个标签,
    又会转换成一个对象
    

我们用一个p标签来演示

    它又会被转换成下面这个对象
    {
        tagName:"p",
        className:"demo",
        title:"第一个段落:DOM树",
        id:"p1",
        innerHTML:"我们用一个p标签来演示"
    }
    你也许会奇怪,为什么标签的class属性会变成对象的className属性而不是class.class是JavaScript保留字!!!tagName表示它的标签名,而innerHTML表示它里面的HTML代码
 
    浏览将HTML标签转换成这样的对象后,在JavaScript中访问该标签的属性或里面的内容就简单多了,但问题是如何访问到这个对象!!
    *首先要给该标签加个ID,然后使用document.getElementById方法就能够访问到它了注意,要将所要访问HTML页面的代码都放在window的onload事件处理上!
    window.onload = initAll;
    function initAll() {
        var p = document.getElementById("p1");
        alert(p.className);
        alert(p.tagName);
        alert(p.title);
        alert(p.id);
        alert(p.innerHTML);
    }
访问HTML页面就这么简单!获取一个元素之后,不但可以读取它的属性值,还可以设置它的属性值!
 
利用这些,我们已经能做出一些激动人心的事了!
    //一些CSS
    .over {
        color:red;
        background:blue;
        font-size:larger;
    }
    .out {
        color:black;
        background:white;
        font-size:smaller;
    }
    .click {
        color:yellow;
        background:yellow;
        font-size:12px;
    }
    //HTML代码
    

一大行文字,它们都是普通的文字!

    //JavaScript代码
    window.onload = initAll;
    function initAll() {
        var p = document.getElementById("p1");
        p.onclick=clickFn;//这里的事件注册方式除了比行内注册方式少了括号,其它的是一样的
        p.onmouseover = overFn;
        p.onmouseout = outFn;
    }
    function clickFn() {
        this.className="click";//这里,this也是可用的
        //注意是className,而不是class
    }
    function overFn() {
        this.className="over";
    }
    function outFn() {
        this.className="out";
    }
    获 取页面元素不止这一种方法.document.getElementsByTagName方法也能获取页面元素,顾名思意,它是通过HTML的标签来获取 元素的,而不是ID. 因为一张HTML页面,一个ID名称是唯一的,而标签名则大多数是相同的,所以,getElementsByTagName方法只有一个参数,即一个字符 串形式的标签名(tagName),而返回值则是一个类似数组的HTML元素列表
    window.onload = initAll;//仍然要写在window.onload事件处理函数中
    function initAll() {
        var pList = document.getElementsByTagName("P");
        //为什么要用大写的P?其实用小写p也可以,不区分大小写,但由于对象的tagName总报告的是大写的
        alert(pList.length);//与数组相似,length报告有多少个元素,页面上有多少个p标签,就报告多少
        alert(pList[0].innerHTML);//这样来访问第一个p元素
    }
    另外,对于document.getElementsByTagName方法,还可以传一个"*"号作为参数,以获取页面的所有元素,类似于CSS里面的通配符
    window.onload = initAll;
    function initAll() {
    var allThings = document.body.getElementsByTagName("*");
    //可在任何DOM元素上调用getElementsByTagName方法,在body上调用此方法时,body外的标签不会获取到
    alert(allThings.length);//页面上有多少个标签,就报告多少(包含DOCTYPE)
    alert(allThings[3].innerHTML);//这样来访问第四个元素
    }
javascript:伪协议
    伪协议不同于因特网上所真实存在的如而是为关联应用程序而使用的.如:(关联QQ),data:(用base64编码来在浏览器端输出二进制文件),还有就是javascript:
    javascript:伪协议有个问题,它会将执行结果返回给当然的页面
    A
    解决方法很简单
    A
    //将undefined加到最后
    尽管javascript伪协议提供了一定的灵活性,但在页面中尽量不要使用!而对于调试JavaScript,javascript伪协议则显得十分有用!

  

阅读(623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~