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)
数值,布尔值,对象和字符串值都有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。
待续...
- javascript自学历程---点滴记录(不断更新)
- 自学QT,点滴记录
- JavaScript点滴记录(一)
- JavaScript点滴记录(二)
- 记录自学前端的历程
- JavaScript 学习点滴记录
- javascript记录点滴
- labview学习历程系列之一“点滴记录”
- 今天开始记录自学android的历程
- 记录自己自学编程的历程
- Javascript语法(不断更新)
- 自学历程
- Linux学习记录(不断更新)
- Linux点滴【不断更新】
- Struts2+Hibernate5+Spring4自学历程(1)
- Asp.net 数据控件使用经验点滴(不断更新)
- 最近看过的书,希望能早日登堂入室,不断更新,记录自己的 学习历程~~~
- 点滴记录(随时更新)
- ASP.NET配置错误页面浅析
- 细谈数据类型以及计算机存储数据机制(一)
- asp.net获取磁盘相关信息
- Canny邊緣檢測基本原理與C++實現
- 指针(一)
- javascript自学历程---点滴记录(不断更新)
- 被误用的保护器件
- Sobel邊緣檢測算法
- TX Text Control文字处理教程(7)邮件合并
- Sobel邊緣檢測和邊緣細化
- VSFlexgrid、MSFlexgrid控件使用技巧(转)
- Robert 邊緣檢測算子
- J2se 有关swing布局管理的几个实例
- java中接口的定义与实现