javascript 基础

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 尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。 实际上,一个完整的JavaScript 实现是由以下
3 个不同部分组成的: * 核心(ECMAScript) * 文档对象模型(DOM) Document object model (整合js,css,html) * 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)

Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的.
在简单的说,ECMAScript 描述了一下内容:
* 语法
* 类型
* 语句
* 关键字
* 保留字
* 运算符
* 对象 (封装,继承,多态) 基于对象的语言,使用对象。

二 javascript 的基础
2.1 变量
x=5

y=6
z=z+y
上面表达式中的x y z,在javascript中,这些字母被称为变量。

js中变量的总结:
--关于js中变量的总结:
(1) 变量是弱类型的(很随便)
(2) 声明变量时不用声明变量类型 全部使用关键字:var
    [这里需要注意:如果加上关键字var 声明的变量即是:局部变量;如果不加var 则声明的变量是全局变量]
(3) 变量名 命名的时候,基本遵循其他语言一致的原则:字母数字下划线构成,数字不能开头!
  js需要注意的是:变量名中字母区分大小写,即:解释器解析的时候,大小写代表的变量不同
(4) 命名规范原则:驼峰式,小驼峰,匈牙利类型标记法。。。
    匈牙利类型标记法:
        在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),
        说明该变量的类型。例如,i 表示整数,s 表示字符串,
        如下所示“Var iMyTestValue = 0, sMySecondValue = "hi";

2.2 基础规范
(1. 每行代码结束,可以不加分号,没有分号,默认会以换行符作为每行的结束;
    [但是,为了代码规范,建议在每行的结尾添加分号]
(2. 注释:
   单行注释:行前加://
   多行注释:和CSS一样,/**/
(3. 使用{}来封装代码块

2.3 常量和标识符
常量:直接在程序中初相的数据值。
标识符:
  1. 由不以数字开头的字母,数字,下划线,$符组成
  2. 常用于表示函数、变量等的名称
  3. Javascript中 代表特定含义的词称为保留字,不允许程序再定义为标识符。
 --【ECMA V3标准保留的关键字有】
[break case catch continue default delete do else false
 finally for function if in instanceof new null return switch
 this throw true try typeof var void while with 等]

2.4 数据类型
javascript 中的数据类型,包括两种:
基本数据类型:Number Null String Undefined Boolean

引用数据类型:object

上述两种数据类型,在内存中的存放位置不同;
基本数据类型存放在内存中的 栈
引用数据类型,也就是对象,存放在内存中的 堆
而对于引用地址的具体编号值(类似于指针),也是存放在 栈

数字类型(Number)
简介:
最基本的数据类型
不区分整形数值和浮点型数值
所有数字都采用64位浮点格式存储,相当于Java和C语言中的double双精度
能表示的最大值是:±1.7976931348623157 x 10308

能表示的最小值是:±5 x 10 -324

整数:
在javascript中,10进制的整数,由数组的序列组成。
精确表达的范围是;
-9007199254740992 (-253) 到 9007199254740992 (253)

超出范围的整数,精确度将受影响

浮点数:
使用小数点记录数据
使用指数记录数据 例如:4.3e23 = 4.3 x 1023

16进制和8进制的数字 表达
    16进制的前面加上0x,八进制的前面加上0

16进制的数是由0-9,A-F等16个字符组成
    8进制数由0-7的8个数字组成
# 2进制: 1111 0011 1101 0100   <-----> 16进制:0xF3D4 <-----> 10进制:62420
# 2进制: 1 111 001 111 010 100 <-----> 8进制:0171724

字符串(String)

简介:
string 是由Unicode字符、数字、标点符号组成的序列
字符串常量首尾由单引号或双引号括起
    javascript中没有字符类型
特殊字符的转义需加:反斜杠\

常见的转义字符:\n 换行 \'单引号 \"双引号 \\反斜杠

String数据类型的使用
特殊字符的使用方法和效果
    Unicode的插入方法
实例:
<script>
 var str="\u4f60\u597d\n欢迎来到\"JavaScript世界\"";
 alert(str);
</script>
        布尔类型(Boolean)
简介:
     Boolean类型仅有两个值:true 和 false,也代表1和0,
实际运算中 true=1,false=0

[注意:这里区分Python中的布尔值,Python中的true 或者 false,首字母要大写]
Boolean值主要用于JavaScript的控制语句,
 例如:
(1)if (x==1){
    y=y+1;
    } else {
    y=y-1;
    }
(2)alert(Boolean(1))
Null & Undefined
Undefined类型
      Undefined类型只有一个值,即:undefined

当声明的变量未初始化时(变量未定义或者定义了没有给赋值),该变量的默认值是:undefined
当函数无明确返回值时,返回的也是“undefined”

Null类型
      undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
尽管这两个值相等,但它们的含义不同。undefined用来表示声明了变量,但未对其初始化时赋予该变量的值;
      null 则用于表示尚未存在的对象。
如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

数据类型转换
  JavaScript属于松散类型的程序语言
变量在声明的时候并不需要指定数据类型
变量只有在赋值的时候才会确定数据类型
表达式中包含不同类型数据则在计算过程中会强制进行类别转换

数字 + 字符串:数字转换为字符串
数字 + 布尔值:true转换为1,false转换为0

字符串 + 布尔值:布尔值转换为字符串true或false

强制类型转换函数
函数parseInt: 强制转换成整数 例如parseInt("6.12")=6 ; parseInt(“12a")=12 ; parseInt(“a12")=NaN ;parseInt(“1a2")=1

函数parseFloat: 强制转换成浮点数 parseFloat("6.12")=6.12
函数eval: 将字符串强制转换为表达式并返回结果 eval("1+1")=2 ; eval("1<2")=true

类型查询函数(typeof)
ECMAScript 提供了 typeof 运算符来判断一个值是否在某种类型的范围内。
可以用这种运算符判断一个值是否表示一种原始类型:如果它是原始类型,还可以判断它表示哪种原始类型。
函数typeof :查询数值当前类型
 (string / number / boolean / object )

例如typeof("test"+3) "string"
例如typeof(null) "object "
例如typeof(true+1) "number"
例如typeof(true-false) "number"
例如typeof('test'+true) "string"

ECMAScript 基本运算
加(+)、 减(-)、 乘(*) 、除(/) 、余数(% ) 加、减、乘、除、余数和数学中的运算方法一样 例如:9/2=4.5,4*5=20,9%2=1


- 除了可以表示减号还可以表示负号 例如:x=-y
+ 除了可以表示加法运算还可以用于字符串的连接 例如:"abc"+"def"="abcdef"

递增(++) 、递减(--)
假如x=2,那么x++表达式执行后的值为3,x--表达式执行后的值为1
i++相当于i=i+1,i--相当于i=i-1
递增和递减运算符可以放在变量前也可以放在变量后:--i
var i=1;
console.log(i++); 巧记:i++表示先赋值,后计算
    console.log(++i); ++i表示先计算,后赋值
    console.log(i--);

console.log(--i);

一元运算
  var a=1;

a=-a; //a=-1

var c="10";
alert(typeof (c));
c=+c; //类型转换
    alert(typeof (c));


var d="jesson";
d=+d;
alert(d); //NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
    alert(typeof(d)); //Number


//NaN特点:
var n=NaN;
alert(n>3);
alert(n<3);
alert(n==3);
alert(n==NaN);
alert(n!=NaN); //NaN参与的所有的运算都是false,除了!=

ECMAScript 逻辑运算符
等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) 
大于等于(>=) 、小于等于(<=)

与 (&&) 、或(||) 、非(!)
1 && 1 = 1 1 || 1 = 1
1 && 0 = 0 1 || 0 = 1
0 && 0 = 0 0 || 0 = 0

!0=1
!1=0

逻辑 AND 运算符(&&)
逻辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。
注意:
如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:
        * 如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
        * 如果两个运算数都是对象,返回第二个对象。
        * 如果某个运算数是 null,返回 null。
        * 如果某个运算数是 NaN,返回 NaN。
        * 如果某个运算数是 undefined,返回undefined。


逻辑 OR 运算符(||)

与逻辑 AND 运算符相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算并不一定返回 Boolean 值:
      * 如果一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象。
      * 如果两个运算数都是对象,返回第一个对象。
      * 如果最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
      * 如果最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
      * 如果某个运算数是 undefined,返回undefined。

ECMAScript 赋值运算符
赋值 =

JavaScript中=代表赋值,两个等号==表示判断是否相等
例如,x=1表示给x赋值为1

if (x==1){...}程序表示当x与1相等时
    if(x==“on”){…}程序表示当x与“on”相等时
配合其他运算符形成的简化表达式
例如i+=1相当于i=i+1,x&=y相当于x=x&y


ECMAScript等性运算符
执行类型转换的规则如下:
    * 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
    * 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
    * 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
    * 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

   在比较时,该运算符还遵守下列规则:
    * 值 null 和 undefined 相等。
    * 在检查相等性时,不能把 null 和 undefined 转换成其他值。
    * 如果某个运算数是 NaN,等号将返回 false,非等号将返回 true。
    * 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一对象,那么等号返回 true,否则两个运算数不等。

ECMAScript 关系运算符(重要)

(1)比较数字和字符串:另一种棘手的状况发生在比较两个字符串形式的数字时,比如:
    var bResult = "25" < "3";

alert(bResult); //输出 "true"
上面这段代码比较的是字符串 "25" 和 "3"。
两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。
  (2)不过,如果把某个运算数该为数字,那么结果就有趣了:
    var bResult = "25" < 3;

alert(bResult); //输出 "false"
这里,字符串 "25" 将被转换成数字 25,然后与数字 3 进行比较,结果不出所料。

关系运算符 总结:
    * 比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.

* 比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较.

全等号和非全等号 ===
等号和非等号的同类运算符是全等号和非全等号。
这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。

   void()

void 运算符对任何值返回 undefined。该运算符通常用于避免输出不应该输出的值,
例如,从 HTML 的 <a> 元素调用 JavaScript 函数时。
要正确做到这一点,函数不能返回有效值,否则浏览器将清空页面,只显示函数的结果。
例如:<a href="javascript:window.open('about:blank')">Click me</a>

如果把这行代码放入 HTML 页面,点击其中的链接,即可看到屏幕上显示 "[object]"。
这是因为 window.open() 方法返回了新打开的窗口的引用。
然后该对象将被转换成要显示的字符串。
要避免这种效果,可以用 void 运算符调用 window.open() 函数:
    <a href="javascript:void(window.open('about:blank'))">Click me</a>

这使 window.open() 调用返回 undefined,它不是有效值,不会显示在浏览器窗口中。

提示:请记住,没有返回值的函数真正返回的都是 undefined。


控制语句
if 条件控制语句:
if-else基本格式:
if (表达式){

语句1;
......
}else{
语句2;
.....
}
功能说明:
如果表达式的值为true则执行语句1,

否则执行语句2

if可以单独使用。

switch 选择控制语句
switch基本格式:
switch (表达式) {

case 值1:语句1;break;
case 值2:语句2;break;
case 值3:语句3;break;
default:语句4;
}
switch比else if结构更加简洁清晰,使程序可读性更强,效率更高。

总结:

1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
   2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择执行哪一个case的语句块
   3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。

循环控制语句:
for循环基本格式:

for (初始化;条件;增量){
语句1;
...
}
功能说明:
实现条件循环,当条件成立时,执行语句1,否则跳出循环体!
实例:
  for (var i=1;i<=7;i++){

document.write("<H"+i+">hello</H "+i+"> ");
document.write("<br>");
}
----------------------------------------------
var arr=[1,"hello",true]//var dic={"1":"111"}
for (var i in arr){
console.log(i)
console.log(arr[i])
}

  while 循环控制语句
  while循环基本格式:
  while (条件){

语句1;
...

}
功能说明:
运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环。

练习:分别用for循环和while循环计算出1-100的和?

异常处理:
try {

//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}

catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}

finally {
//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

注:主动抛出异常 throw Error('xxxx') 

 

posted @ 2016-11-09 19:14  hello-Jesson  阅读(557)  评论(0编辑  收藏  举报