目录、
[toc]
JavaScript的特点:
1、脚本语言
在html中执行,脚本简单地说就是一条条的文字命令,这些文字命令是我们可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。(Java不是脚本语言)
2、解释性语言
计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。
将其他语言翻译成机器语言的工具,被称为编译器。
编译器翻译的方式有两种:一个是编译,一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器。
解释性语言编写的程序**不进行预先编译**,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。
3、弱类型语言
弱类型定义语言:数据类型可以被忽略的语言。
(强类型定义语言:强制数据类型定义的语言。比如:Java,C语言)
4、从上往下,从右往左的执行顺序(异步执行)
JavaScript的组成:
1、ECMAScript(核心)
ECMA-262 定义的EMCAScript与Web浏览器没有依赖关系。浏览器仅是ECMAScript实现可能的宿主环境之一,宿主环境不仅提供基本的ECMAScript实现同时也提供该语言的扩展,以便语言与环境之间对接交互。扩展如DOMECMA规定了这门语言的组成部分
1,语法
2,类型
3,语句
4,关键字
5,保留字
6,操作符
7,对象
2、DOM(文档对象模型)
DOM(Document Object Model) 是针对XML但经过扩展用于HTML的应用程序编程接口。DOM将整个页面映射成一个多节点结构。
html代码:
<html>
<head>
<title>hello</title>
</head>
<body>
<p>nihao </p>
</body>
</html>
dom模型
html
/ \
head body
| |
title p
| |
'hello' '你好'
3、BOM(浏览器对象模型)
BOM(Browser Object Model),开发人员可以使用BOM控制浏览器显示的页面以外的部分。弹出新浏览器窗口;移动,缩放,关闭浏览器的功能;提供浏览器详细信息的navigator对象;提供浏览器所加载页面的详细信息的location对象;提供用户显示器分辨率详细信息的screen对象;对cookies的支持;支持XMLHttpRequest,IE中的ActiveXObject自定义对象
JavaScript的使用:
1、在页面中直接使用
<script type="text/javascript">
//javascript代码
</script>
2、使用外部的js文件
<script type="text?javascript" src="外部js文件的路径">
//不能在此书写js代码否则会被忽略
</script>
注:
1、如果需要获取html页面中的数据,对dom节点进行操作时,将<script>标签放在<body>标签后面。如果不需要获取,放在<head>标签里面。
2、type : 可看做是language的替代属性,表示编写代码使用的脚本语言的内容类型,这个属性非必须,默认是text/javascript
3、src : 表示包含要执行代码的外部文件(src 可以跨域访问。例如:本机有一个服务器,要去访问其他服务器内容)
4、 <noscript>(浏览器不支持script时,才会显示。如果支持,不显示。写在html标签后面。)
<noscript>
本页面需要浏览器支持(启用)javascript
</noscrpt>
JavaScript的语法:
1.js区分大小写
typeof:关键字(判断变量是什么类型的对象)
typeOf:非关键字
var:关键字(定义变量)
VAR:非关键字
2.标识符(变量)
1.以字母,数字下划线和$组成
2.不能够以数字开头
3.不能够使用关键字进行定义
4.建议使用驼峰式命名
3.js中的注释
只有两种:
1.// 单行注释
2./*多行注释*/
html:
<!--注释内容-->
css:
/*注释内容*/
java:
1.//单行注释
2./*多行注释*/
3.javadoc
/***
*文档注释,写在类上或方法上,生成api
/
4、语句
每个语句以分号结尾,如果省略分号,由解析器确定语句的结尾,即分号可以省略,但是我们要求每个语句的末尾都应该有分号。
<script type="text?javascript">
alert(1)
alert(2)
</script>
//两个都会执行
<script type="text?javascript">
alert(1);
alert(2)
</script>
//两个都会执行
<script type="text?javascript">
alert(1)alert(2)
</script>
//只会执行前面那一个
5、变量的声明:定义变量时使用var操作符
var 变量名;
声明 var message;
初始化 message = "hello"
声明并初始化 var message = "hello";
1.var age; //变量的声明
age=12;
2.var age=12;
3.var age1=12,age2=13;
//age2=13;
局部变量和全局变量:
1.局部变量
使用var操作符,并且将该变量定义在函数内部
function test(){
var message = "hello";
}
test();
alert(message); //错误
2.全局变量
js整个作用域
1>使用var操作符,并且将该变量定义在js整个作用域下
2>不使用var操作符定义变量
(如果在函数中定义变量没有加var,该变量为全局变量,外面获取到变量的前提是函数在外部被调用)
function test(){
message = "hello";
}
test();
alert(message); //可以访问
JavaScript的数据类型:
1)ECMAScript不支持自定义类型,只有6种数据类型:
五种基本数据类型(简单数据类型):
Undefined 未定义 "undefined"
var a ;
var a = "undefined";//不做
Null 空引用数据类型 "null"
var a = null;
Boolean 布尔类型 true/false
var a = false;
Number 字类型
整数
浮点数
String 字符串类型 "" ''(不区分单双引号)
var a ="true";
var a ='hello';
一种引用类型(复杂数据类型):
Object(本质由一组无序的键值对组成)
var person= new Object();
person.name = "terry";
person.age = 12;
2) typeof 操作符返回该变量名所指向数据的类型
语法:typeof 变量名
可有取值如下:
"undefined" 未定义
"boolean" 布尔类型
"string" 字符串
"number" 数值
"object" 对象或者null
"function" 函数
instanceof
a instanceof b
//检测a是不是属于b的一个实例
3) 基本数据类型
1. Undefiend
该类型只有一个值undefined。对未声明和未初始化的变量执行typeof操作符都返回undefined
var a;
console.log(a); // undefined
console.log(typeof a); // undefined
console.log(b); //ReferenceError: b is not defined
console.log(typeof b); // undefined
2. Null类型
该类型只有一个值 null ,null可以表示一个空对象的指针。
var car = null;
console.log(typeof car ) //object null被认为是空对象的引用
【使用情景】
如果一个变量准备将来保存对象,可以将该变量初始化null而不是其他,这样可以通过检查null值就可以知道相应的变量是否已经保存了一个对象的引用。
if(car !=null ){
//car对象执行某些操作
}
实际上 undefined 派生自null值。undefined == null 结果为 true
null与undefined用途不同,null可以用来表示一个空对象,但是没有必要把一个变量的值显式设置为undefined
3. Boolean类型
该类型只有两个值,true,false虽然boolean类型的取值只有两个,但是ECMAScript中所有的类型的值都有与这两个Boolean值等价的值。
4. Number
该类型用来表示整数和浮点数
1) 表示方法:
1. 整数:
十进制数: 55 0~9
八进制数: 第一位必须是0,然后是八进制数字序列(0-7),如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数值被当作十进制数解析
070 (表示 7*8一次方 = 56)
079 (超过了范围,表示79)
十六进制: 前两位为0x,其他位为(0~9,A~F)
2. 浮点数
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后必须至少有一位数字。浮点数值的最高精度是17位小数。
例如: var f = 1.2;
默认情况下,js会将小数点后面带有6个0以上的浮点数值转换为以e表示法表示的数值
科学计数法:e
var e = 3.125e7; //31250000
2) 数值范围
由于内存的限制,ECMAScript不能保存世界上所有的数值。ECMAScript能表示的最小数值保存在Number.MIN_VALUE中,能表示的最大的数值保存在Number.MAX_VALUE中。如果某次计算的结果超过了JavaScript数值范围,将会返回Infinity(正无极)或者-Infinity(负无极)使用 isFinite()函数可以判断参数是否在最大值和最小值之间,如果在,返回true
在绝大数浏览器中:
Number.MIN_VALUE : 5e-324
Number.MAX_VALUE : 1.7976931348623157e+308
如果某次计算返回了正的或者负的Infinity,那么该值无法继续参与下一次计算。可以使用isFinite(para)函数判断para 是否在最大数最小数之间
3) 非数值 NaN (not a number)(如果不是数字返回true,如果是数字返回false)
该数值表示一个本来要返回数值的操作数未返回数据的情况。
var a = 10/'a';
console.log(a);
number类型和其他数据类型进行操作时,其他数据类型不能转化成number类型,返回NaN。
任何涉及到NaN的操作都会返回NaN; NaN与任何值都不相等,包括NaN本身。
isNaN,判断参数是否“不是数值”,当参数para不是数值的时候返回true
isNaN(NaN); true
isNaN("blue"); true 无法转换为数值
isNaN(10); false 10
isNaN("10"); false 10
isNaN(true); fase//true转化成number类型是1
注意:
1) 默认情况下,ECMAScript会将小数点后带有6个零以上的浮点数转化为科学计数法。
0.0000003 => 3e-7
2) 在进行算术计算时,所有以八进制十六进制表示的数值都会被转换成十进制数值。
3) 保存浮点数需要的内存是整数的两倍,因此ECMAScript会不失时机将浮点转换为整数
例如:
var a = 1.;
var b = 1.0; 都将解析为1
4) 避免测试某个特点的浮点数值,是使用IEEE 754数值的浮点计算的通病
例如: 0.1+0.2结果不是0.3,而是0.30000000000000004
Math.pow(2, 53),十进制即 9007199254740992
5. String
该类型表示由零个或者多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号或者单引号表示
1)字符字面量
\n 换行
\t 制表
\b 退格
\r 回车
\\ 斜杠
\' 单引号
\" 双引号
例:console.log("\n");
2)字符长度
通过length属性获取字符长度
例:console.log(gxj.length);
6. Object
ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行"new 对象类型"来创建。
var o = new Object();
Object类型是所有它的实例的基础,换句话说,Object类型所具有的任何属性和方法,同样存在于更具体的对象。
constructor:(当前对象是谁创建的) 保存用户创建当前对象的函数
例:console.log(o.constructor)
hasOwnProperty(propertyName); 用于检查给定的属性是否在当前对象实例中
isPrototypeOf(object); 用于检查传入的对象是否是原型
propertyIsEnumerable(propertyName); 用于检查给定的属性在当前对象实例中是否存在
toLocaleString(); 返回对象的字符串表示,该字符串与执行环境的地区对应
toString(); 返回对象的字符串表示
valueOf(); 返回对象的字符串,数值,布尔值的表示。
对于不同类型的对象,js定义了多个版本的 toString 和 valueOf 方法
toString:
(1)普通对象,返回 "[object Object]";
(2)数组,返回数组元素之间添加逗号合并成的字符串;
(3)函数,返回函数的定义式的字符串;
(4)日期对象,返回一个可读的日期和时间字符串;
(5)正则,返回其字面量表达式构成的字符串;
valueOf:
(1)日期对象,返回自1970年1月1日到现在的毫秒数;
(2)其它均返回对象本身;