JS基础(1)

######2018-7-17
### 一 JS的来源
第一个版本  ECMAScript 1 (简称 ES1) 1997
第二个版本  ECMAScript 2 (简称 ES2) 1998
第三个版本  ECMAScript 3 (简称 ES3) 1999
第四个版本  ECMAScript 4 (简称 ES4) ...
第五个版本 ECMAScript 5 (简称 ES5) 2009
第六个版本  ECMAScript 2015 (简称 ES6) 2015
第七个版本  ECMAScript 2016 (简称 ES7) 2016
第八个版本 ECMAScript 2017 (简称 ES8) 2017


###二 JS基础
/*
多行注释
多行注释
多行注释
多行注释
*/

// 语句

``` JS
var a = 1;
// 语句块(代码块)
if (true) {
    var a = 1;
    {
        var v = 1;
    }

}
```


#####标识符的取名规则
1. 严格区分大小(大小写不一样)
2. 由 _、$、数字、字母组成(不能以数字开头)
3. 不能使用关键字和保留字

1. 驼峰命名法  : phoneNumber
2. 蛇形命名法  : phone_number


###三  变量
(1)变量定义:可变化的量,用来储存数据的容器
变量的生命(创建变量)
1.声明未初始化

var num ; ( ES5)
let num ; (ES6)





2. 声明并初始化

var num = 10;   “=” 赋值符,将“=”右边的数据赋值给“=”左边
let name = '张三';


3. 连续声明(直接赋值)

var a, b, c = 0;
let e, f = 3, g;


(2)变量声明的问题
1. 变量重名
如果是 var 声明的变量,后面的会覆盖前面的(程序不会报错)

var num = 1;
var num = 2;
console.log(num);
如果是 let 声明的变量,不允许重名(程序会报错)。

let num = 1;
let num = 2;(不允许重名)
console.log(num);

2. 遗漏声明
直接访问一个未声明的变量,程序会报错。

console.log(a);

对一个未声明的变量进行赋值,会默认在全局创建该变量。

a = 10;(不建议使用)
console.log(a);

3. 连续声明

let a = 1, b = 1, c = 1;
let a = b = c = 1;(不建议使用)
console.log(a, b, c);

###四 变量的作用域
变量作用域定义:是指变量有效的区域
全局作用域、局部作用域
在 ES5 中,针对 var 声明的变量,其局部作用域由函数划分。
在 ES6 中,针对 let 声明的变量,其局部作用域由大括号划分。

var a = 1;
let b = 2;

{
    let d = 4;
    console.log(d);
}

{
    let d = 5;
    console.log(d);
}

console.log(d);(
四、变量提升
一个未赋值的变量,它的默认值为 undefined。

var a = 1 ;
console.log(a);
a = 1;

变量提升:在代码正式执行之前,JS 引擎会先解析(只看不运行)所有的代码,
并找到通过 var 声明的变量,将“变量的声明”提升到当前作用域的头部。




function fn(){
    var a;
    console.log(a);
    a = 1;
}
fn();

var 和 let 的区别:
1. 变量重名:在同一作用域中,var 允许重名,后面覆盖前面。而 let 不允许重名。
2. 作用域:var 的局部作用域通过函数划分,而let 的局部作作用域通过大括号划分。
3. 变量提升:var 存在变量提升,let 不存在变量提升。

function fn(){
    var a = b = c = 10;
}
fn();

console.log(a);(只有a通过 var创建,b c 默认全局,所以这句会报错)
console.log(b); (结果输出10 )
console.log(c); (结果输出10 )
常量:不变的量(ES6)不可修改

const  num = 1 ;



###五 数据类型

(1)数字 number

let num = .9;
let num = NaN;
Not a Number (非数字)
1. 任何涉及到 NaN 的操作,结果都是 NaN。
2. NaN 跟任何值都不相等,包括自己。

console.log(NaN == NaN);

(2)字符串(带引号,英文状态单双皆可)string
单引号可以嵌套双引号,双引号可以嵌套单引号
同类型引号不可嵌套
\n:在字符串里表示换行
\t:在字符串里表示制表

let str = "'1231SKFskdf\t23'";
console.log(str);

(3)布尔 boolean

true(真) false(假)

(4)未定义 undefined

undefined(当变量未赋值时)

(5) 空 null

null(连容器都没有)
let num = null ;(可以用来释放内存)
let num = undefined;
console.log(undefined == null);(输出结果为true)
console.log(typeof null);(查看数据类型)



(6)symbol 唯一


let a = NaN;
console.log(typeof a);
console.log(isNaN('hello'));   // 是不是  非数字





(7)复杂数据类型
对象:objct(也叫引用数据类型)




一、字符串拼接符
(ES5)用 + 号拼接

let str1 = 'hello';
let str2 = 'js';
let str3 = str1 + '\n' + str2;
console.log(str3);
let name = '马冬梅';
let age = 18;
let gender = '女';
let str = "我的名字叫" + name + ",今年" + age + "岁。性别" + gender + "。";

// 模板字符串(ES6)

let str2 = `我的名字叫${name},
今年${1 + 10}岁,性别${gender}。`;
console.log(str2);


模板字符的特点   ${   }
1. 支持换行
2. 可以解析字符串内部代码

二、算术运算符

let a = 10;
let b = 5;

console.log(a + b);
console.log(a - b);
console.log(a * b);
console.log(a / b);
console.log(a % b);  ( 取模(求余)  )
console.log(a ** b);   (求幂)(ES6)


前置型:先自增(自减),再执行其他操作
后置型:后自增(自减),先执行其他操作

let x = 5;
let y = x--;
console.log(x, y);  (结果为4   5  )

let x = 5;
let y = x++ * x++;
console.log(x, y);(结果为  7  30 )

三、比较运算符

let a = '5';
let b = '6';
console.log(a > b);
console.log(a >= b);
console.log(a < b);
console.log(a <= b);

console.log(a == b);  (   主要比较 值  是否相等相等    )
console.log(a != b);
console.log(a === b); ( 严格等:比较   值  和   数据类型   都相等   )
console.log(a !== b); (严格不等:比较   值  和   数据类型   都不相等

四、逻辑运算符
或  ||:一真全真

console.log(false || true);
// 与  &&:一假全假

console.log(false && true);
// 非  !: 取反

console.log(!true);


###六 赋值运算符

let a = 1;
let b = 2;
let c = a + b;


+=
a = a + b;
a += b;
a = a - b;
a -= b;


-= ...
*= ...
/= ...
%= ...以此类推



###七  三目运算符

?:   条件 ? 表达式1 : 表达式2
条件为真,执行表达式1,条件为假,执行表达式2



let age = 20;

age > 18 ? console.log('已成年') : console.log('未成年');
let a = 1 + 3 * 5;

posted @ 2018-07-22 23:16  Fen达  阅读(173)  评论(0编辑  收藏  举报