为了学习公司的js框架,项目经理组织我们共同学习《JavaScript高级程序设计(第3版)》一书。我将用博文记录我们的学习点滴。
一、JavaScript简介
1、JavaScript是什么?它能干什么?
个人理解是客户端(实际指浏览器)脚本,能与浏览器窗口及网页内容进行交互。
JavaScript的核心语言功能由ECMAScript提供。ECMAScript规定了这门语言的语法、类型、语句、关键字、保留字、操作符、对象等。ECMAScript本身与Web浏览器没有依赖关系,Web浏览器只是ECMAScript应用的宿主环境之一,比如Node、Adobe Flash也是宿主环境。
与浏览器窗口的交互由BOM(浏览器对象模型Browser Object Model)提供访问方法和接口,比如能弹出关闭移动缩放浏览器窗口,能支持cookies,提供navigator、location、screen对象以及XMLHttpRequest、ActiveXObject等自定义对象;
与网页内容的交互由DOM(文档对象模型Document Object Model)提供访问方法和接口,它把整个页面映射为一个多层节点结构,能对文档中的任意部分进行访问和操作。
JavaScript主要可以做客户端验证,能实现各种提升用户体验的动态效果。
二、在HTML中使用JavaScript
1.在HTML中使用JavaScript需要使用<script>元素,有嵌入脚本和外部脚本两种写法。
嵌入脚本:<script type="text/javascript" >alert("hello,javascript");</script>
外部脚本:<script type="text/javascript" src="example.js"> </script>
//这里的src值可以是同一个服务器上的文件路径,也可以是其他任何域中的文件(个人理解为一个网址)。
2.<script>的async属性和defer属性
使用这两个属性能将JavaScript脚本延迟到整个页面都解析完毕后再运行
<script type="text/javascript" defer="defer" src="example1.js"> </script>
<script type="text/javascript" async="async" src="example2.js"> </script>
3.<noscript>元素的使用
可以指定在不支持脚本的浏览器中显示的替代内容,写在<body>标签中。
<body>
<noscript>该页面需要您的浏览器支持(启用)JavaScript</noscript>
</body>
三、基本概念
1.JavaScript区分大小写
2.在ECMAScript5引入了严格模式的概念,在代码中添加"use strict"即可,要么在脚本顶部,要么只在特定的函数体中。
3.ECMAScript变量是松散类型的
4.变量用var声明时,是局部变量,省去var则是全局变量。
5.ECMAScript中的数据类型,有5中简单的数据类型(也称基本数据类型)Undefined、Null、Boolean、Number、String和一种复杂数据类型Object
类型 | 学习备注 |
Undefined和Null | undefined:使用var声明变量但未对其初始化时,变量的值就是undefined(没必要显式设置),执行typeof操作符的返回值也是undefined null表示一个空对象指针,执行typeof操作符时返回值是object;显式得设置为null表明该变量想存对象,是有好处的 |
Number | 数值范围是-Infinity~Infinity,可使用isFinite()来判断数字是否为有限大;另外,使用isNaN()来判断参数是否为数字; 注意:NaN与任何值都不相等,包括与NaN本身。 数值转换函数Number(),parseInt(),parseFloat():Boolean值true转为1,false转为0; 当字符串中以数字开头后边有其他字符,那么使用Number()转换时为NaN,使用parseInt()时会忽略后边的非数字字符; 对于空字符串,使用Number()转换时结果为0,使用parseInt()转换时为NaN; parseInt()提供了第二个参数表示转换为多少进制,而Number()和parseFloat()则只能转为10进制; 使用parseFloat()转换时,多个小数点只认第一个; |
Boolean | 有true和false两个字面值;但所有类型都可以通过转型函数Boolean()转换为一个Boolean值。对于Null和Undefined类型,转为false;对于Number,0和NaN会转为false,其余转为true;对于String,""转为false,非空字符串转为true |
String | 采用单引号、双引号都行,但需要配对;调用字符串的length属性得到的值可能不准确(如果包含转义序列时); 字符串转换函数toString()和String(): null和undefined没有toString(),而String()返回这两个值的字面值; 在数值调用toString()函数时,可传入一个表示输出数值基数的参数,即按多少进制输出,不传时是按照10进制输出的; |
Object | 对象是一组数据和功能的组合; 创建对象时,如果没有参数,可省略小括号,写为var obj = new Object; 检查给定的属性在当前对象的实例中是否存在:hasOwnProperty(propertyName) 检查传入的对象是否是另一个对象的原型:isPrototypeOf(object) 检查给定的属性是否能够使用for-in语句来枚举:propertyIsEnumerable(propertyName) 返回对象的字符串表示:toString()、toLocaleString()、valueOf() (valueOf()返回对象的字符串、数值或布尔值表示) |
6.ECMAScript中的操作符
操作符 | 学习备注 |
递增和递减操作符 | ++i与i++,注意前置和后置的区别; 此操作符适用于Undefined和Null外的所有类型,非数值类型会先转换为数值然后执行加减1操作 |
一元加和减操作符 | 就按正负号理解,也可用于转换数据类型 |
位操作符 | 按内存中数值的位来操作数值; 默认情况下,ECMAScript中的所有整数都是有符号整数; 按位非Not(符号为一个波浪线~,与操作数的负值减1结果相同): var num1 = 25; var num2 = ~num1; 按位或OR(符号为一个竖线|):var result = 25|3; alert(result);//结果为27 按位异或XOR(由一个插入符号表示,^) 移位操作:左移、有符号的右移、无符号右移 var oldValue = 2; var newValue = oldValue << 5; //表示2转换为二进制后左移5位 |
布尔操作符 | 逻辑非(!)、逻辑与(&&)、逻辑或(||), 可用于转换数据类型,即先隐式执行Boolean() |
乘性操作符 | 乘法、除法、求模,注意有Infinity参与的乘性运算,结果往往是正负Infinity或NaN |
加性操作符 | 加法、减法,同样注意有Infinity参与的运算 |
关系操作符 | 小于、大于、小于等于、大于等于 如果两个操作数是字符串,则比较两个字符串对应的字符串编码值; 如果只有一个操作数是数值,则先将另一个操作数(若为对象则调用其valueOf()或toString()方法)转换为一个数值,然后执行比较; |
相等操作符 | 相等和不相等——先转换再比较,全等和不全等——仅比较而不转换 |
条件操作符 | 类似于var max = (num1 > num2) ?num1:num2; |
赋值操作符 | 重点介绍一下复合赋值操作符 (*=、 /= 、%= 、+=、-=、左移赋值<<=、有符号右移赋值>>=、无符号右移赋值>>>=) |
逗号操作符 | 多用于声明多个变量; 用于赋值时总会返回表达式中的最后一项:如var num = (5,2,1);//返回1 |
7.语句
语句 | 学习备注 |
if | 始终使用代码块 |
do-while | 常用于循环体中代码至少要被执行一次的情形 |
while | |
for | for循环的循环变量是全局变量: var count = 10; for(var i = 0; i<count; i++){ alert(i); } alert(i);//此行代码执行结果为10 |
for-in | 可以用来枚举对象的属性,在使用for-in前需要检测对象是否为null或undefined for(var propName in window){ document.write(propName);//顺序不可预测 } |
lable | 在代码中添加标签,语法如label:statement |
break和continue | |
with | 将代码的作用域设置到一个特定的对象中 示例: with(location){ var url = href; var hostName = hostname; } 如果在局部变量中找不到变量(如href)的定义,就会在location对象中看是否有相同的属性 另外,大量使用with语句会降低性能 |
switch | 支持任何数据类型,如字符串,但比较的时候采用的是全等操作符 |
8.函数
可return也可不return,最好是要么始终返回一个值,要么永远都不要返回值
函数的arguments对象的length属性可以获知有多少个参数传递给了函数
这里函数没有重载一说