美文网首页
JavaScript入门到放弃

JavaScript入门到放弃

作者: wkmx | 来源:发表于2019-06-23 21:01 被阅读0次

    js基础

    • ECMAScript-JavaScript 的核心

    BOM 浏览器对象模型

    一套操作浏览器功能的API

    通过BOM可以操作浏览器窗口, 比如: 弹出框, 控制浏览器跳转

    DOM 文档对象模型

    一套操作页面元素的API, DOM 可以把HTML看作是文档树, 通过DOM提供的API可以对书上的节点进行操作

    JavaScript

    • 行内元素
    • 页面嵌入js
    • 外部嵌入
    <script src="index.js"></script> // js 导入语法
    // 导入的语句里写入js不会生效
    

    计算机组成

    软件

    硬件

    • 三大件: CPU, 内存, 硬盘, 主板
    • 输入设备: 鼠标, 键盘, 手写板
    • 输出设备: 显示器, 打印机, 投影机

    1. 关键字

    • typeof typeof typeof(String)
    • instanceof date instanceof Date

    变量

    数据类型

    number 类型

    var num = 9; // 十进制
    var num = 0xA; // 十六进制
    

    浮点数值最高精度是17位数字,

    • 数值范围
    Number.MAX_VALUE // 最大值
    Number.MIN_VALUE // 最小值
    Infinity // 无穷大
    -Infinity // 无穷小
    NaN // Not a number
    isNaN //  Is not a number // 判断是不是一个数字
    

    string 字符串

    • 转移字符
    \n
    \r
    \b 空格
    \t 制表符
    
    • 获取长度
    msg.length // 获取字符串长度 
    

    boolean

    • true为1, false为0

    undefined, null

    • undefined 表示一个声明了没有复制的变量, 变量只声明的时候默认是undefined
    • null 表示一个空, 变量的值如果想为null, 必须手动设置

    typeof

    typeof age; // 获取变量类型, 返回的结果是string类型
    

    类型转换

    数据类型的转换

      1. toString 转换成字符串类型
    Number.toString(); // 将数字转换成字符串
    Boolean.toString(); // bool 转换成字符窜
    
      1. String()
    String(null);
    String(undefined);
    

    null, undefined 不能转换成字符串, 可以使用String() 转换

      1. 字符串拼接
    Number + ''; //字符串
    typeof(Number + ''); 
    

    转换成数值类型

      1. Number
    Number(String); // 将数值转换成数值类型, 如果是非正常的数字字符串, 会返回 NaN
    Number(true); // 返回1, false为0
    
      1. parseInt() // int 整数
    parseInt(str); // 
    parseInt(Boolean); // 使用 parseInt 转换 Boolean 类型, 会返回 NaN
    parseInt("123abc"); // 返回123, Number("123abc") 返回 NaN, 匹配从头开始的最大整数 ^(\d+)
    

    转换成float

      1. parseFloat()
    parseFloat(true) // NaN
    parseFloat("1.23") // 1.23
    parseFloat("1.23aaa") // 1.23
    parseFloat("aaa1.23") // NaN
    parseFloat("1.23.456") // 1.23, 只解析第一个点
    

    取正或者取负

    +"123" // 123
    -"123" // -123
    +true // 1
    -true // -1
    +false // 0
    -false // -0
    
    "123" - 0 // first convert "123" to number
    "123abc" + 0 // 如果加号一边是字符串, 使用的是字符串凭借 concat
    

    转换成布尔类型

    Boolean(NaN) // false
    Boolean(0) // false
    Boolean("") // false
    Boolean(undefined) // false
    Boolean(null) // false
    

    操作符

    算术运算符

    5/0; // Infinity
    5 % 0; // NaN
    

    一元运算符

    • ++

    关系运算符

    10 == "10"; // true 判断的是变量的值是否相等
    10 === "10"; // false, 只有值跟类型都相等的时候, 才会相等
    

    运算符优先级

    1. () 优先级最高
    2. 一元运算符 ++ -- !
    3. 算数运算符 先* / % 后 + -
    4. 关系运算符 > >= < <=
    5. 相等运算符 == != === !==
    6. 逻辑运算符 先 && 后 ||
    7. 赋值运算符
    
    4 >= 6 || '人' != '阿凡达' && 
    

    表达式

    表达式

    分支语句

    • if
    • else if
    • else

    三元运算符

    true ? num1 : num2;
    

    switch 语句

    switch  (expression) {
        case 常量1:
            语句;
            break;
        case 常量2:
            语句;
            break;
        default:
            break;
    }
    

    switch 语句的判断使用的是 ===

    布尔类型的隐式转换

    Boolean(123); // 显示类型转换
    if (num) {
        // true
    }
    
    !"str" // 隐式转换
    

    循环结构

    while

    while (expression) {
        // body 
    }
    

    do while

    先执行语句, 后判断条件, 至少运行一次

    for 循环

    for (初始化表达式1; 条件表达式2; 自增表达式3) {
    
    }
    

    调试

    错误

    • 语法错误
    • 逻辑错误

    过去调试JavaScript的方式

    • alert()
    • console.log()

    断点调试

    • F11: 往下执行一行
    • Watch: 监视变量

    数组

    数组是一种数据类型, 数组中存储的数据类型可以不一致, 但是不推荐

    getattr

    var names = ['zs', 'ls', 'ww', 1, true];
    names[0] // (索引|下标) 取值
    

    property

    • length

    method

    • append
    • join

    函数

    arguments

    我们可以通过 arguments 获取函数调用的时候的实参, arguments 非常向数组, 但不是数组

    匿名函数

    匿名函数: 没有名称的函数

    
    

    代码规范

    1. 命名规范
    2. 变量规范
    3. 注释规范
    4. 空格规范
    5. 换行规范
    

    作用域

    • 全局作用域
    • 局部作用域

    js 中没有块作用域的, 所以可以在块作用域中使用变量

    预解析

    console.log(num); 
    var num; // 变量提升
    
    
    f1(); // 函数提升
    function f1() {
    
    }
    

    预解析:

    1. 变量提升, 把变量的声明提升到当前作用域的最上面, 不包括变量的赋值
    2. 函数提升, 把函数的声明提升到当前作用域的最上面, 不包括函数的调用

    局部作用域也要预解析, 在预解析的过程中, 如果函数和变量的名字相同, 此时函数优先解析

    例子

    f1();
    
    console.log(c);
    console.log(b);
    console.log(a);
    
    function f1() {
        var a = b = c = 9; // 等于  var a = 9; // 只有a是局部变量, 其他全都是全局变量, 具有变量提升
        console.log(a);
        console.log(b);
        console.log(c);
    }
    

    对象

    1. 对象的创建

    1. 动态创建

    var student = {
        name: 'zs',
        age: 18,
        sayHello: function() {
            console.log(this.name + ': hello');
        }
    }
    

    this 指当前对象, 对象属性访问的方式, student.name, student['name']

    2. 构造函数: new Object();

    var hero = new Object(); // 创建一个空的对象
    

    3. 工厂方法

    function createHero() {
        var hero = new Object();
    
        return hero;
    }
    

    4. 自定义构造函数

    function Hero(name) {
        this 动态的给对象增加成员
        this 指向了当前对象
        this.name = name;
    }
    

    new 关键字

    • 执行过程
    1. 在内存中创建了一个空的对象
    2. 让构造函数中的this指向刚刚创建的对象
    3. 执行构造函数, 构造函数中设置属性和方法
    4. 返回了当前对象
    

    this 关键字

    1. 函数中
        函数中的 `this` 指向 `window`
    
    2. 方法中
        方法中指向的是这个方法所属的对象
    
    3. 构造函数这种
        指向构造函数中在内存创建的对象
    

    2. 对象基本操作

    对象的访问访问

    • obj.name
    • obj['name']

    遍历对象的成员

    for (var key in obj) {
    console.log(key, obj[key]); // key, value
    }

    删除 对象的成员

    delete o.a0; // true
    

    3. 简单复杂类型和复杂类型

    • 栈区

    内置对象

    MDN

    (https://developer.mozilla.org/zh-CN/)[https://developer.mozilla.org/zh-CN/]

    1. Math

    [0, 1]

    • Math.Random(max-min) + min, [min, max]
    • Math.floor: 向下取整
    • Math.ceil: 向上取整
    • Math.round: 四舍五入

    Math 不是一个构造函数, 里面提供的是静态成员

    2. Date 对象

    GMT 格林威治时间, 世界标准时间, GMT+08000 中国标准时间

    1. var d = new Date(); // undefined, 获得当前时间对象
    d; // Mon Jun 24 2019 11:01:05 GMT+0800 (中国标准时间)
    d.valueOf(); // 1561345265813 // 获取时间戳 毫秒单位
    
    2. new Date(时间戳 毫秒值);
    
    3. new Date("日期格式字符串");
    
    4. new Date(1999, 8, 8);
    
    Number(new Date()); // 获取当前时间的毫秒值
    + new Date(); // 
    

    static method

    • Date.now(); // 浏览器兼容问题

    method

    • valueOf(); // 获取毫秒值

    • d.getTime(); // 获取毫秒值 推荐

    • toDateString(); // 获取年月日

    • toTimeString(); // 获取时分秒

    • toLocaleString(); // 根据本地计算机语言 返回时间格式

    • year = date.getFullYear(),

    • month = date.getMonth() + 1,

    • day = date.getDate(),

    • hour = date.getHours(),

    • minute = date.getMinutes(),

    • second = date.getSeconds();

    return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second; // 返回指定格式

    3. Array

    property

    • length

    method

    • push
    • reserver
    • sort([int compareFunction(e1, e2)])
    • concat() // 拼接数组
    • slice() // 截取新的数组
    • splice(start, [,deleteCount[, item[, item2]]]) // 删除截取数组
    • indexOf(seachElement[, formIndex = 0])
    • lastIndexOf() // 查找数组
    • join() // 拼接
    清空数组
    arr = [];
    
    

    html5

    • filter(callback,)
    • forEach

    sort 默认按字符编码排序

    • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
    • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

    static

    • Array.isArray(arr) // 判断一个变量是不是数组
    var l = [];
    l.toString() // "1,2,3"
    l.valueOf() // 打印数组本身
    
    sort
    

    基本包装类型

    基本包装类型: 基本类型包装成复杂类型: String, Number, Boolean

    var s = new String("")
    

    字符串

    特性: 不可变

    method

    • charAt(Number = 0)
    • charCodeAt(Number = 0)
    • indexOf(String[, startIndex])
    • lastindexOf()
    • slice(startIndex[, endIndex]) // 字符串切片
    • split([separactor[, limit]])
    • trim(); // 去除空格 tab space 换行符
    • trimLeft();
    • trimRight();
    • search(); // 支持正则表达式
    str = "hello world"; // "hello world"
    str.charAt(0) // "h"
    str.charAt(1) // "e"
    
    str.charCodeAt(); // 104 获取字符的编码
    

    property

    相关文章

      网友评论

          本文标题:JavaScript入门到放弃

          本文链接:https://www.haomeiwen.com/subject/aqiwqctx.html