JavaScript基础

历史 简介

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

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

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

ECMAScript 描述了以下内容:

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

JS的引入方式

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


JS基础

强类型与弱类型的语言

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

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

JavaScript是弱类型的语言

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

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

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

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

变量

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

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

var name="aa", age=20, job="bbb";
  • 声明变量时 可以不用var. 如果不用var 那么它是全局变量.
  • 变量命名,首字符只能是字母,下划线,$美元符 三选一,且区分大小写,x与X是两个变量
  • 变量还应遵守以下某条著名的命名规则:
大驼峰 :首字母是大写的,接下来的字母都以大写字符开头
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

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

结果是2

Null & Undefined
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

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);

运算符

算数运算符

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

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

先引用再赋值

var  i =10;
var ret;
ret = i++;//先引用再赋值
console.log(ret);
console.log(i);

结果:
10
11

先计算 后引用

var  i =10;
var ret;
ret = ++i;//先计算 后引用
console.log(ret);
console.log(i);

结果:
11
11

逻辑运算符

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

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)

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

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

全等号和非全等号

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

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

关系运算符(重要)

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

比较数字和字符串

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

比较下面的情况

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

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

总结:

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

流程控制

基本的语言都是这样的

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

if-else

if-else

if (表达式){
语句1;
......
}else{
语句2;
.....
}

if else if else

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

switch 选择控制语句 switch case

switch (表达式) {
    case 值1:语句1;break;
    case 值2:语句2;break;
    case 值3:语句3;break;
    default:语句4;
}
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循环

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

求和

var sum_num=0;

for(var i=1;i<=100;i++){
    sum_num +=i;
}

alert(sum_num)

while循环

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

异常处理

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

参考资料:

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

posted @ 2017-05-23 20:02  hzxPeter  阅读(238)  评论(0编辑  收藏  举报