我们不生产代码,但我们是bug的专业制造者

Javascript高级程序设计笔记整理

1.javascript的组成

JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:

  • ECMAScript,由ECMA-262定义,提供核心语言功能;
  • 文档对象模型(DOM) ,提供访问和操作网页内容的方法和接口;
  • 浏览器对象模型(BOM) ,提供与浏览器交互的方法和接口

    2.在 HTML 中使用 JavaScript

    作为javascript结束的标志,所以在js中不能出现
    如console.log(““);
    需要使用转义字符
    alert(“<\/script>”);
  • 为了让页面的内容更快的加载出来,最好将javascript引入的标签从head标签移到body标签里面,放在head中会等到所有的js文件都引入解析后从显示body的内容。

3.isNaN()函数

1
2
3
4
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN("10")); //false(可以被转换成数值 10) alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)

4.数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()。

  • 第一个函数, 即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这 3个 函数对于同样的输入会有返回不同的结果。 Number()函数的转换规则如下。
  • 如果是 Boolean 值,true 和 false 将分别被转换为 1和 0。
  • 如果是数字值,只是简单的传入和返回。
  • 如果是 null 值,返回 0。
  • 如果是 undefined,返回 NaN。
  • 如果是字符串,遵循下列规则: 如果字符串中只包含数字(包括前面带正号或负号的情况) ,则将其转换为十进制数值,即”1” 会变成 1,”123”会变成 123,而”011”会变成11(注意:前导的零被忽略了) ; 如果字符串中包含有效的浮点格式,如”1.1”,则将其转换为对应的浮点数值(同样,也会忽 略前导零) ; 如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整 数值; 如果字符串是空的(不包含任何字符) ,则将其转换为 0; 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。  如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换 的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符 串值。 根据这么多的规则使用 Number()把各种数据类型转换为数值确实有点复杂。下面还是给出几个具 体的例子吧。
    1
    2
    3
    4
    var num1 = Number("Hello world!"); //NaN
    var num2 = Number(""); //0
    var num3 = Number("000011"); //11
    var num4 = Number(true); //1
1
2
3
4
5
6
var result1 = 5 - true; // 4,因为true被转换成了1
var result2 = NaN - 1; // NaN
var result3 = 5 - 3; // 2
var result4 = 5 - ""; // 5,因为"" 被转换成了0
var result5 = 5 - "2"; // 3,因为"2"被转换成了2
var result6 = 5 - null; // 5,因为null被转换成了0

5.操作符的比较

1
2
3
4
5
6
7
8
9
10
11
null == undefined true
true == 1 true
"NaN" == NaN false
true == 2 false
5 == NaN false
undefined == 0 false
NaN == NaN false
null == 0 false
NaN != NaN true
"5"==5 true
false == 0 true

全等操作符”===”,它表示两个操作数未经转换的情况下相等才相等
var result1 = (“55” == 55); //true,因为转换后相等 var result2 = (“55” === 55); //false,因为不同的数据类型不相等

6.with语句

定义with的作用是为了简化多次编写同一个对象的工作

1
2
3
4
5
6
7
8
9
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
上面几行代码都包含 location 对象。如果使用 with 语句,可以把上面的代码改写成如下所示:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}

7.javascript对象按值传递

1
2
3
4
5
6
7
8
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"

解析:如 果 person 是按引用传递的, 那么 person 就会自动被修改为指向其 name 属性值 为”Greg”的新对象。但是,当接下来再访问 person.name 时,显示的值仍然是”Nicholas”。这说明 即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写 obj 时,这 个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

8.javascript没有块级作用域、

1
2
3
if (true) {
var color = "blue";
} alert(color); //"blue"

这里是在一个 if 语句中定义了变量 color。如果是在 C、C++或 Java中,color 会在 if 语句执 行完毕后被销毁。但在 JavaScript中,if 语句中的变量声明会将变量添加到当前的执行环境(在这里是 全局环境)中。在使用 for 语句时尤其要牢记这一差异,例如:

1
2
3
for (var i=0; i < 10; i++){
doSomething(i);
} alert(i); //10

对于有块级作用域的语言来说,for 语句初始化变量的表达式所定义的变量,只会存在于循环的环 境之中。而对于 JavaScript来说,由 for 语句创建的变量 i 即使在 for 循环执行结束后,也依旧会存在 于循环外部的执行环境中。

Dubbo入门

  1. 1. 1.javascript的组成
  2. 2. 2.在 HTML 中使用 JavaScript
  3. 3. 3.isNaN()函数
  4. 4. 4.数值转换
  5. 5. 5.操作符的比较
  6. 6. 6.with语句
  7. 7. 7.javascript对象按值传递
  8. 8. 8.javascript没有块级作用域、