javaScript概述
javaScript的历史:
- 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言)
- Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript
- 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript.
- 为了统一三家,ECMA(欧洲计算机制造协会)定义了ECMA-262规范.国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。EcmaScript是规范.
ECMAscript:
ECMAscrpipt是javascript的重要标准,他只是javascript的一部分,实际上,一个完整的javascript是由以下三部分组成的:
1,核心:ECMAscript
2,文档对象模型:DOM(Document object model)整合js,css,html
3,浏览器对象模型:BOM(Broswer object model)整合js,浏览器
javascript在开发中绝大多数是基于对象开发色,也是一种面向对象的语言。
ECMAscript描述了下面内容:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 运算符
- 对象(多态,封装,继承)
javascript的引入方式,也就是调用方式,有两种:
- 直接在HTML文件中以script关键字编写js代码
- 在HTML文件中导入有js代码的js文件
1,直接引用
Title hello world
2,导入js文件(推荐用法),使HTML文件变得清晰客观
Title hello world
javascript基础:
1,变量:
var a = 1
var b = 2
var c = a + b
在javascript中,a,b,c,都是变量,存储值,声明变量时全部使用var关键字,不适用var关键字,比如变量a就变成了全局变量。
一行可以声明多个不同类型的变量,
//每行代码结尾要加上分好 ' ; ' var name="jon",age=20,job="IT";
变量命名,不能以关键字,保留字,数字,下划线命名,
命名最好用首字母大写,驼峰命名法,
//变量名长的时候用,见名之意var MyJavaScript = 100;
2,标识符:
- 由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
- 常用于表示函数、变量等的名称
- 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
- JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符
关键字:
2,数据类型
数字类型(number)整形和浮点型属于number类型
- 整形int,浮点型float
字符串类型(sring)
- 是由Unicode字符,数字,标识符组成的序列,
- 由双引号或单引号阔起来,如"hello",'world'
布尔类型(boolean)
- 只有两个值true和false,
- 在python中是首字母大写True,False
Null和Undefined// undefined 类型
// undefined类型只有一个值,就是undefined,有两种情况返回undefined// 1,当声明变量未初始化时,该变量的默认值是undefined// 2,当函数没有明确的返回值时,返回的也是undefinedTitle
// Null 类型只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象 。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。var person=new Person()var person=null
数据类型转化:
javascript是一种弱性语言,也是松散型的
变量在声明的时候不需要指定数据类型
变量在赋值的时候才会确定数据类型
在表达式中,包含不同类型的运算在计算过程中会强制进行类型转换
Title
3,ECMAscript运算符:
算术运算符:
加(+)减(-)乘(*)除(/)取余(%)' - ' 除了当做减法,还可以用作负数 如 -2' + '除了当做加法,还可以用于字符串连接 如 "hello"+"world" ++ 自加1-- 自减1var i=1;i++ // 2i-- // 0
i++和i-- 是先引用,后运算 ++i //2 --i //0 这是先运算,后引用
逻辑运算符:
== 等于!= 不等于> 大于< 小于>= 大于等于<= 小于等于=== 完全等于!== 完全不等于&& 与|| 或! 非
赋值运算符:
等号= 在javascript是代表赋值var a = 10;//把10赋值给a变量
等性运算符:
执行类型转换的规则如下:
- 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
- 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
- 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
- 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在比较时,该运算符还遵守下列规则:
- 值 null 和 undefined 相等。
- 在检查相等性时,不能把 null 和 undefined 转换成其他值。
- 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
- 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。
关系运算符:
Title
3,控制语句
if else控制语句
if (表达式){ 语句1 }else{ 语句2 }表达式的结果为true执行语句1,否则执行else的语句2
if else if 控制语句:
switch case选择控制语句
//switch语句里的表达式结果,直接找对应的case值没找到执行case语句 var x =1; switch(x){ case 1:console.log(y="星期一"); break; case 2:console.log(y="星期二"); break; case 3:console.log(y="星期三"); break; case 4:console.log(y="星期四"); break; case 5:console.log(y="星期五"); break; case 6:console.log(y="星期六"); break; case 7:console.log(y="星期日"); break; default: y="未定义";} // 结果 星期一
switch比eles if 给够更清晰,更简洁,是程序可读性更强,效率更高
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。说到基本类型的数值比较,那当然要有两个数。然后重点来了——if 语句每一句都是独立的,看下面的语句:if (a == 1) ...else if (a == 2) ...这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。于是 switch case 就出来了,把上面的改成 switch case 版本:switch (a) { case 0: break; case 1:} 总结:1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选 择执行哪一个case的语句块3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载 一次。所以在多路分支时用switch比if..else if .. else结构要效率高。
for 循环控制语句
for循环基本格式for (初始化;条件;增量){ 语句.....}当条件满足时执行,不满足 跳出循环
while 循环
while循环基本格式while (条件){ 语句 }
//5个world var i = 0; while (i<5){ console.log("world"); i++; }