javascript自学历程---点滴记录(不断更新)

来源:互联网 发布:定义如下变量和数组 编辑:程序博客网 时间:2024/05/07 09:08

1.按照解析嵌入式代码的规则,当浏览器遇到字符串”</script>"时,就会认为那是结束的</script>标签,而通过把这个字符串分隔为两部分可以解决这个问题,例如:

<script type="text/javascript">  function sayScript(){     alert("</scr" + "ipt>");  }</script>


2.<script>在页面中的位置?

       按照惯例,所有的<script>标签都应该在页面的<head>元素中,但这种做法无非是为了工整,易于管理罢了,如果这样做的话,就意味着页面必须等所有的javascript代码全部被下载,解析和执行完成以后,才能开始呈现页面的内容(浏览器遇到<body>元素时才开始呈现内容),对于那些需要很多js代码的页面来说,这会造成页面呈现的迟疑,至少在用户眼里是这样的,延迟期间浏览器窗口是一片空白,为了避免这个问题,现代的web应用程序一般都把全部js引用放在<body>元素中,放在页面的内容后面,比如:

<html>    <head>    </head>    <body>        <!--content-->         <script type="text/javascript" src="a.js"></script>         <script type="text/javascript" src="b.js"></script>    </body></html>

    但是这样做的前提是页面被呈现时不能经过js的处理。


3.看代码:

function test(){   message = "hi";    //全局变量}test();alert(message);      //输出"hi"

      在上面的代码中,message并没有用var修饰,那么在这里这是一个全局变量,所以在方法外可以正确输出message的值,但如果这个message在方法内用var修饰了,那它是一个局部变量,在方法执行完之后就销毁了,此时在方法外输出的自然就是undefined

4.由于js是松散类型的,所以可以像下面这样定义变量:

var message = "hi",      found = false,      age = 25;
   用逗号隔开就可以了。


5.typeof关键字:是关键字,不是函数,用于检测给定变量的数据类型。例如:

var message = "string";var str;
var str1=null;alert(typeof message);    //"string"alert(typeof (message));  //"string"alert(typeof 56);         //"number"alert(typeof str);        //"undefined"
alert(typeof str1);       //"object"

6.浮点数值的最高精度是17为小树,但在进行算术计算时,其精确度确远远不如整数,0.1+0.2的值不是0.3,而是0.30000000000000004。这个小小的舍入误差会导致无法测试特定的浮点数值,例如:

if(a+b == 0.3){            //不要做这样的测试    alert("you got 0.3.");}

7.关于NaN(Not a Number),是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作未返回数值的情况,例如,任何数除以0会返回NaN,而不会像其他高级语言    一样会导致错误。另外NaN有两个特别的特点:

   ①任何涉及NaN的操作都会返回NaN(例如NaN/10);

   ②NaN与任何值都不相等,包括它自己,例如下面代码会返回false:alert(NaN == NaN);

   针对这两个特点,ECMAScript定义了isNaN(param)函数,用于判断参数是否 “不是数值”,比如:

alert(isNaN(NaN));        //truealert(isNaN(10));         //falsealert(isNaN("10"));       //false(可以转换成数值)alert(isNaN("blue"));     //truealert(isNaN(true));       //false(可以转换成1)


8.将其他类型转换为字符类型.

数值,布尔值,对象和字符串值都有toString()方法,但null和undefined值没有这个方法,看例子:

var age=11;var ageAsString = age.toString();var found=true;var foundAsString = found.toString();

 我们也可以为toString()传一个参数,既输出数值的基数,没有参数默认的基数为10,既十进制,例如:

var num=10;alert(num.toString());    //"10"alert(num.toString(2));  //"1010"alert(num.toString(8));  //"12"alert(num.toString(16));//"a"alert(num.toString());    //"10"

在不知道要转换的值是不是null或undefined的时候,还可以使用另一个转型函数String(),这个函数能将任何类型的值转换为字符串,它遵循下列规则:

  a. 如果这个值有toString()方法,则调用没有参数的该方法转换;

  b. 如果值是null,则返回“null”;

  c. 如果值是undefined,则返回“undefined”;

9.关系操作符,既<,>,<=,>=符号的使用,直接看例子:

    var result = "Brick" < "alphabet";   //true;

    因为大写的“B”的字符编码为66,而小写的“a”为97,所以是小于号,也就是说当比较的两个操作数都为字符串时,会先将其转换为字符编码再进行比较。所以如果要真正按首字母排序,需将其转化为相同的大小写形式,然后再比较,比如:

   var result = "Brick".toLowerCase() < "alphabet".toLowerCase();  //false;

   如果当操作符两边的操作数不都为字符串时如何做比较呢?请看:

   var result = "23" > 2;   // true; 此种情况下,会将字符串23转化为number型,然后与2进行比较,所以为大于号

   那大家看这种情况下会是什么结果呢:

   var result = "a" > 21;   // false  此时结果一定为false。因为“a”不能转换为合理的数值,而转换为NaN,任何数与NaN做对比,都会返回false;

10.switch语句在比较值时,使用的是全等操作符,所以不会出现类型转换后再比较的情况。

11.在ECMAScript中,函数的参数与大多数高级语言有所不同,它的函数不介意传递进来多少参数,也不在乎传递进来的参数是什么类型,也就是说,即便你定义的函数只接受      两个参数,在调用这个函数时也未必要传递两个参数,可以是一个,三个甚至不传,这是因为ECMAScript中的参数在内部是用数组来表示的,,看例子就明白了:

   

    <script type="text/javascript">        function sayHi(){            alert("hello,"+arguments[0]+arguments[1]);        }        sayHi("zhangyan","dafangzi");    </script>
    执行这段代码后,输出:hello,zhangyandafangzi。

待续...