JavaScript基础知识

# 概述:
    # ES6就是指ECMAScript 6
一个完整的JavaScript实现是由以下三个不同部分组成:
    1. 核心(ECMAScript)
    2. 文档对象模型(DOM) Document object model(整合js,css,html)
    3. 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
# 引入方式:
1. Script标签内写代码
    /* <script> 在这里写代码 </script> */
2. 引入额外的JS文件
    /* <script src="js文件地址"></script> */

# JaveScript语言规范
1. 注释
// 这个是单行注释
/*这个是多行注释*/
2. 结束符
以 ; 为结束符

JavaScript语言基础

# 变量声明-var
    1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头.
    2. 声明变量使用 var 变量名; 的格式来进行声明.
    eg: var name = "Cheer";
    @注意:
        1. 变量名是区分大小写的.
        2. 推荐使用驼峰体
        3. 保留字不能用作变量名
     # let - for循环很适用
        1.声明的变量只在let命令所在的代码块内有效,所以for循环很适用
        eg: for (let i=0,i<10,i++){...}
     # const
        1.一旦声明,其值就不可以改变

JavaScript数据类型

# JavaScript拥有动态效果
    也就是可以往一个变量名上面赋多次不同类型的值.
# 数值(Number)
    1. JavaScript不区分浮点型和整型,就只有一种数据类型.
    2. 还有一种 NaN,标识不是一个数字.
        eg: parseInt('123') --> 如果是数值就会返回正确的数值
            parseInt('abc') --> 这个本身不是数值,所以返回 NaN
# 字符串(String)
    var a='hello';
    var b='word';
    var c=a+b;
    console.log(c) --> helloword
    # 常用方法
    1. .length--返回长度 --> 类似于python的 len
    2. .trim()--移除空白 --> 类似于python的 strip()
    3. .charAt(n)--返回第n个字符 --> 类似于python的字符串索引取值
    4. .concat(value,...)--拼接 --> 类似于python的"".join()
        字符串和数值不可以拼接
    5. .indexOf(substring,start)--子序列位置 --> 类似于python的index()
        找不到是-1
    6. .substring(from,end)--根据索引获取子序列 --> 类似于python中根据索引取值
    7. .slice--切片 --> 类似于python中的中括号切片
    8. .toLowerCase--小写 --> 类似于python中的lower()转化为小写
    9. .toUpperCase--大写 --> 类似于python中的upper()转化为大写
    10. .split(delimiter,limit)--分割--> 类似于python中的split()以什么分割
        delimiter:以什么分割
        limit:分割几次

    # string.slice(start, stop)和string.substring(start, stop):
        1.两者的相同点:
            如果start等于end,返回空字符串
            如果stop参数省略,则取到字符串末
            如果某个参数超过string的长度,这个参数会被替换为string的长度

        2.substirng()的特点:
            如果 start > stop ,start和stop将被交换
            如果参数是负数或者不是数字,将会被0替换

        3.silce()的特点:
            如果 start > stop 不会交换两者
            如果start小于0,则切割从字符串末尾往前数的第abs(start)个的字符开始(包括该位置的字符)
            如果stop小于0,则切割在从字符串末尾往前数的第abs(stop)个字符结束(不包含该位置字符)

             slice和substring的区别
    # 反引号+$ 格式化输出
        var a='xc';
        `你好! ${a}` ==> 你好! xc

# 布尔值(Boolean)
    1. 不同于python的是,true 和 false 都是小写.
    2. "",0,null,undefined,NaN 都是 false.
    # null 和 undefined
        1. null 表示值为空,一般在需要指定或清空一个变量时才使用,如 name=null;
        2. undefined 表示当声明一个变量但是没有初始化的时候,该变量的默认值是 undefined .还有就是函数没有明确返回值的时候,返回的也是 undefined
        3. null 是自己给的,undefined 只是声明了,但是却没有赋值.

# 对象(Object)
    JavaScript中的所有事物都是对象: 字符串,数值,数组,函数...此外,JavaScript允许自定义对象.
    JavaScript提供多个内建对象,比如String,Date,Array等等.
    # 数组
        数组对象的作用是:使用单独的变量名来存储一些列的值.类似于python中的列表.
        eg: var a=[123,'asd'];
            console.log(a[1]); ==> 'asd'
        # 常用方法
            1 .length   数组的大小
            2 .push(ele)    尾部追加元素
            3 .pop()    获取尾部的元素
            4 .unshift(ele) 头部插入元素
            5 .shift()  头部移除元素
            6 .slice(start, end)    切片
            7 .reverse()    反转
            8 .join(seq)    将数组元素连接成字符串
            9 .concat(val, ...) 连接数组
            10 .sort()  排序
            11 .forEach()   将数组的每个元素传递给回调函数 --> 配合 function(currentValue, index, arr) 一起使用,这个类似于python中的 lambda 匿名函数.
            12 .splice()    删除元素,并向数组添加新元素。 --> 不可以是字符串,只可以是数组的替换.
            13 .map()   返回一个数组元素调用函数处理后的值的新数组 --> 配合 function(currentValue, index, arr) 一起使用,这个类似于python中的 lambda 匿名函数.

# 新的原始的数据类型(Symbol)
    表示独一无二的值 ,他是JavaScript语言的第七种数据类型
# 类型查询
    使用 typeof 查询类型
    但是 typeof 是一个元运算符,类似于(++,--,!,-等一元运算符),不是一个函数,也不是一个语句

    对变量或值调用 typeof 运算符将返回下列值之一:
        1. undefined - 如果变量是 Undefined 类型的
        2. boolean - 如果变量是 Boolean 类型的
        3. number - 如果变量是 Number 类型的
        4. string - 如果变量是 String 类型的
        5. object - 如果变量是一种引用类型或 Null 类型的

运算符

/*只写特殊的*/
# 算数运算符
        eg: var x=10;
            var y=x++;
            var z=++x;
    x++: 先把x的值赋值给y,x再进行加1运算
    ++x: 先进性加1运算,最终的值赋给z

# 比较运算符
    > >= < <= != == === !==
    "===":强制等于,js是一门弱语言.双等于只判断值是否相同,不判断类型
# 逻辑运算符
    1. && 与
    2. || 或
    3. ! 非
# 赋值运算符
    = += -= *= /=

流程控制

# if - else
if (条件){
    代码
}else{
    代码
}

# if - else if - else
if (条件){
    代码
}else if (条件){
    代码
}else {
    代码
}

# switch
switch (值){
    case 条件:
        代码
        break
    case 条件:
        代码
        .
        .
        .
    default:
        代码
}

# for
for (i=0;i<10;i++) {
    代码
}

# while
while (条件) {
    代码
}

# 三元运算
var a=1;
var b=2;
var c=a>b ? a:b
    判断a是否大于b,如果成立把a赋值给c,如果不成立把b赋值给c

函数

# 格式
function 函数名(条件) {
    代码块
}
# 格式-补充
var f = v => v;
等同于: var f=function(v) {
        return v; }
# 函数中的arguments参数
函数只能返回一个值,如果要返回多个值,只能放进数组对象中返回.
arguments 相当于取到了所有的参数

# 函数的全局变量和局部变量
与python是换了层皮
# 作用域
与python一模一样

词法分析

js中在调用函数的那一瞬间,会先进性词法分析
过程:
    - 函数参数
    - 函数的局部变量
    - 函数声明

内置对象和方法(里面有json串)

js也是所有事物都是对象
# 重点提一下JSON对象
var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1);
// 对象转换成JSON字符串
var str = JSON.stringify(obj1);
01-23 23:28