JavaScript基础

历史 简介

一个完整的 JavaScript 实现是由以下 3 个不同部分组成

  • 核心(ECMAScript)
  • 文档对象模型(DOM) Document object model (整合js,css,html)
  • 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
  • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的.

所谓的基于对象就是直接使用,用new创建一个新的类

ECMAScript 描述了以下内容:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 运算符
  • 对象 (封装 继承 多态) 基于对象的语言.使用对象.
  • JavaScript的引入方式

JS的引入方式

1
2
3
4
5
6
{#1 直接编写#}
<script>
alert('hello yuan')
</script>
{#2 导入文件#}
<script src="hello.js"></script>

JS基础

强类型与弱类型的语言

Python是强类型的语言,是数据类型的原因,同时是动态语言(与声明和编译解释有关)

print(12+”hello”) 会报错,是不同的数据类型,不能相加

JavaScript是弱类型的语言

这种是隐式转换,数字自动转换成字符串

1
console.log(12+"hello")//在编译的时候执行的是隐式的

无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell

https://www.zhihu.com/question/19918532

变量

1
2
3
var x=5
var y=6
var z=x+y
  • 声明变量时不用声明变量类型. 全都使用var关键字;
    关键是分号结尾

  • 一行可以声明多个变量.并且可以是不同类型.

    1
    var name="aa", age=20, job="bbb";
  • 声明变量时 可以不用var. 如果不用var 那么它是全局变量.

  • 变量命名,首字符只能是字母,下划线,$美元符 三选一,且区分大小写,x与X是两个变量
  • 变量还应遵守以下某条著名的命名规则:
1
2
3
4
5
6
大驼峰 :首字母是大写的,接下来的字母都以大写字符开头
var myTestValue = 0;
小驼峰 :首字母是小写的,接下来的字母都以大写字符开头。
var MyTestValue = 0;
专业的:标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。
var iMyTestValue = 0; //i代表int s代表自付串

规范

分号结尾,可以不写,但是是以换行符进行区分

注释 支持多行注释和单行注释. / / //

使用{}来封装代码块

常量和标识符

常量 :直接在程序中出现的数据值
标识符

  • 由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
  • 常用于表示函数、变量等的名称
  • 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
  • JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符

数据类型

数字类型

不区分整型数值和浮点型数值
所有数字都采用64位浮点格式存储,相当于Java和C语言中的double格式
能表示的最大值是±1.7976931348623157 x 10308
能表示的最小值是±5 x 10 -324

  • 整数
    在JavaScript中10进制的整数由数字的序列组成
    精确表达的范围是-9007199254740992 (-253) 到 9007199254740992 (253)
    超出范围的整数,精确度将受影响

  • 浮点数

    使用小数点记录数据
    例如:3.4,5.6
    使用指数记录数据
    例如:4.3e23 = 4.3 x 1023
    
字符串

都是Unicode数据,所以没有字符编码的问题
是由Unicode字符、数字、标点符号组成的序列
字符串常量首尾由单引号或双引号括起
JavaScript中没有字符类型
常用特殊字符在字符串中的表达
字符串中部分特殊字符必须加上右划线\
常用的转义字符 \n:换行 \’:单引号 \”:双引号 \:右划线

布尔型Boolean()

Boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0

1
2
3
if (2>1){
console.log(true+1)
}

结果是2

Null & Undefined
1
2
3
4
5
6
7
8
9
var n = 12;
var s = "hello";
var b = false;
var x;//没有初始化
console.log(typeof n);
console.log(typeof s);
console.log(typeof b);
console.log(typeof x);

结果:
number
string
boolean
undefined

  • undefiend类型

    Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined
    当函数无明确返回值时,返回的也是值 “undefined”;

  • Null 类型

    另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

    尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

强制类型转换
  • parseInt()
    NaN:当涉及数据准换成数字的时候不行
    console.log(parseInt(“3.43abc”));//结果是3.43
    console.log(parseInt(“a3.43a”))//此时的结果就是NaN 不是一个数字

  • parseFloat()
    强制转换成成数字 console.log(parseFloat(“6.12”));//把字符串转转换成相应的浮点数

  • evel()
    将字符串强制转换为表达式并返回结果 eval(“1+1”)=2 ;
类型查询函数

typeof

1
2
3
4
5
6
7
8
9
x=typeof("test"+3) ; // "string"
y=typeof(null) ; // "object "
z=typeof(true+1) ; // "number"
d=typeof(true-false) ; // number
console.log(x);
console.log(y);
console.log(z);
console.log(d);

运算符

算数运算符

加(+)、 减(-)、 乘(*) 、除(/) 、余数(% )

递增(++) 、递减(--)

先引用再赋值

1
2
3
4
5
var i =10;
var ret;
ret = i++;//先引用再赋值
console.log(ret);
console.log(i);

结果:
10
11

先计算 后引用

1
2
3
4
5
var i =10;
var ret;
ret = ++i;//先计算 后引用
console.log(ret);
console.log(i);

结果:
11
11

逻辑运算符

等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) 大于等于(>=) 、小于等于(<=) 与 (&&) 、或(||) 、非(!)

1
2
3
4
console.log(1&&3);//3
console.log(0&&3);//0
console.log(1||3);//1
console.log(0||3);//3

与运算的时候是同时为真才为真,有一个为假就是假
或运算的时候有一个为真就是真

辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:

  • 如果某个运算数是 null,返回 null。
  • 如果某个运算数是 NaN,返回 NaN。
  • 如果某个运算数是 undefined,返回undefined。

NaN
not a number
NaN 与参与的运算都是false,除了!=
console.log(NaN!=NaN);//只有这个的结果是True

等性运算

  • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
    console.log(true == 1);console.log(false == 0);

  • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
    console.log(“3”==3)

  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。

  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

全等号和非全等号

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

1
2
3
4
var sRusults ="3" ==3; //true
console.log(sRusults);
var sRusults ="3" ===3; // 结果是false 不会进行转换
console.log(sRusults);

关系运算符(重要)

1
2
var bResult = "aab" < "aac "; //从头开始比每一个的ASCII的值
console.log(bResult)

比较数字和字符串

1
2
var bResult = "25" < 3; //"25"会转换成数字25
alert(bResult); //输出 "false"

比较下面的情况

1
2
var bResult = "25" < "3"; //比较的ASCII
alert(bResult); //输出 "true"

上面这段代码比较的是字符串 “25” 和 “3”。两个运算数都是字符串,所以比较的是它们的字符代码(”2” 的字符代码是 50,”3” 的字符代码是 51)。

总结:

  • 比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
  • 比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较.

流程控制

基本的语言都是这样的

  • 顺序语句
  • if-else
  • 循环语句

if-else

if-else

1
2
3
4
5
6
7
if (表达式){
语句1;
......
}else{
语句2;
.....
}

if else if else

1
2
3
4
5
6
7
8
9
if (表达式1) {
语句1;
}else if (表达式2){
语句2;
}else if (表达式3){
语句3;
} else{
语句4;
}

switch 选择控制语句 switch case

1
2
3
4
5
6
switch (表达式) {
case1:语句1;break;
case2:语句2;break;
case3:语句3;break;
default:语句4;
}
1
2
3
4
5
6
7
8
9
10
var x = (new Date());//获取今天日期 周天是0
console.log(x);
switch(x){
case 1:console.log("周一");break;
case 2:console.log("周二");break;
case 3:console.log("周二");break;
case 4:console.log("周二");break;
default:console.log("数据错误");
}

for循环

1
2
3
4
for (初始化;条件;增量){
语句1;
...
}
1
2
3
for(var i=0;i<10;i++){
document.write("<h1>"+i+"</h1>")
}

求和

1
2
3
4
5
6
7
var sum_num=0;
for(var i=1;i<=100;i++){
sum_num +=i;
}
alert(sum_num)

while循环

1
2
3
4
5
var i = 0;
while( i<10){
document.write("<h1>"+i+"</h1>");
i++;
}

异常处理

1
2
3
4
5
6
7
8
9
10
try {
//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

参考资料:

http://www.cnblogs.com/yuanchenqi/articles/5980312.html

© 2018 Peter's Blog Center All Rights Reserved.
Theme by hiero