javascript初识
1,什么是javascript?
javascript定义了网页的行为,
广义的JavaScript=ECMAScript+DOM+BOM
ECMAScript,提供核心语言功能;
文档对象模型(DOM),提供访问和操作网页内容的方法和接口;
浏览器对象模型(BOM),提供与浏览器交互的方法和接口。
2,在HTML 中使用Javascript
1,< script >元素
- async:可选.表示应该先下载脚本,不妨碍页面中其他操作,只对外部脚本文件有效
- charset:可选.表示脚本可以延迟到文档完全解析后和显示后再执行。只对外部脚本有效
- src:可选。表示包含要执行代码的外部文件。
2,引入方式
使用< script>元素的方式有两种:直接在页面中嵌入 JavaScript 代码和包含外部 JavaScript文件
示例:
1.<script type="text/javascript">
function sayHi(){
alert("Hi!");
}
</script>
2.<script type="text/javascript" src="example.js"></script>
嵌入外部文件时< script>标签之间的代码会被忽略
< script>元素嵌入在< head>之间会导致网页加载时有一段子空白阶段,为防止这种情况,一般把< script>放在< body>元素最后
1.延迟脚本
为< script>标签定义了 defer 属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script type="text/javascript" defer="defer" src="example1.js"></script>
<script type="text/javascript" defer="defer" src="example2.js"></script>
</head>
<body>
<!-- 这里放内容 -->
</body>
</html>
在这个例子中,虽然我们把< script>元素放在了文档的< head>元素中,但其中包含的脚本将延迟到浏览器遇到< /html>标签后再执行
2,异步脚本
与defer属性相似,指定 async 属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容,但与 defer
不同的是,标记为 async 的脚本并不保证按照指定它们的先后顺序执行。
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script type="text/javascript" async src="example1.js"></script>
<script type="text/javascript" async src="example2.js"></script>
</head>
<body>
<!-- 这里放内容 -->
</body>
</html>
XHTML 文档中,要把 async 属性设置为 async=“async”
JavaScript数据类型
1.Undefined类型
Undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量但未对其加以初始化时,这个变量的值就是 undefined,
var message;
alert(message == undefined); //true
:对未初始化的变量执行 typeof 操作符会返回 undefined 值,而对未声明的变量执行 typeof 操作符同样也会返回 undefined 值。
var message; // 这个变量声明之后默认取得了 undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
2.Null类型
Null 类型是第二个只有一个值的数据类型,这个特殊的值是 null。从逻辑角度来看,null 值表示一个空对象指针,这也正是使用 typeof 操作符检测 null 值时会返回"object"的原因
var car = null;
alert(typeof car); // "object"
undefined 值是派生自 null 值的,因此 ECMA-262 规定对它们的相等性测试要返回 true:
alert(null == undefined); //true
3.Boolean类型
Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和 false。这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0.
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN(参见本章后面有关NaN的内容) |
Object | 任何对象 | null |
Undefined | \ | undefined |
4.Number类型
Number 类型应该是 ECMAScript 中最令人关注的数据类型了,这种类型使用 IEEE754 格式来表示整数和浮点数值
最基本的数值字面量格式是十进制整数,十进制整数可以向下面那样直接在代码中输入
除了十进制表示外,还可以通过八进制和十六进制来表示。其中,八进制字面值得第一位必须是0,( 16进制是0x)然后是八进制数字序列(0~7)。如果后接的字面值超出范围,则前面的导零失效,后面的值将被当做十进制数值解析。
var a=065; //八进制的53
var b=085; //85
var c=08; //8
- NaN
NaN,即非数值(Not a Number)是一个特殊的值。在ES中,任何数值除以非数值会返回NaN。首先,任何涉及NaN的操作(NaN/10)都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。
数值转换
- 如果是 Boolean 值,true 和 false 将分别被转换为 1 和 0。 如果是数字值,只是简单的传入和返回。
- 如果是 null 值,返回 0。 如果是 undefined,返回 NaN。 如果是字符串,遵循下列规则:
- 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"
会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了); - 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽
略前导零); - 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整
数值; - 如果字符串是空的(不包含任何字符),则将其转换为 0; 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。
5.String类型
String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双引号(")或单引号(’)表示,因此下面两种字符串的写法都是有效的:
var firstName = "Nicholas";
var lastName = 'Zakas';
对字符串进行加法运算即将字符串进行拼接
用toString()方法将其他类型转换为字符串类型
转型函数 String():
- 如果值有 toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是 null,则返回"null";
- 如果值是 undefined,则返回"undefined"。
6.Object类型
ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定义对像。
var o = new Object();
var o = new Object;//可以,但不推荐
操作符:
数学运算符
+、-、、/、%(取余)
+=、-=、=、/=、%=
++、- -
作用同C语言中
逻辑运算符
1、JS逻辑与运算符
格式 A&&B
如果 A的值为真,那么就返回B的值
如果A的值为假,返回A的值。
0、""、null、false、undefined、NaN都会判为false,其他都为true
2、JS逻辑或运算符
格式 A||B
如果 A的值为真,那么就返回A的值
如果A的值为假,返回B的值。
3、逻辑非运算!
!A 如果A为真就变成假,如果是假就变成真
比较运算符
=:赋值;
==:判断是否相等(变量类型可以不相等,会隐式转换)
===:判断全等(变量类型也要相等)
位运算符
有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记)
无符号右移操作符由 3 个大于号(>>>)表示,这个操作符会将数值的所有 32 位都向右移动。对正数来说,无符号右移的结果与有符号右移相同,无符号右移操作符会把负数的二进制码当成正数的二进制码。而且,由于负数以其绝对值的二进制补码形式表示,因此就会导致无符号右移后的结果非常之大
var oldValue = -64; // 等于二进制的 11111111111111111111111111000000
var newValue = oldValue >>> 5; // 等于十进制的 134217726
左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数