• JS


    JS   -----> JavaScript:实现页面上的动态效果

    一.JS的理论知识

    1.JS的历史及ECMAScript

    ECMAScript    一个标准     Es5/Es6 

    node,js    跑在服务器端的JS

    2.JS的三大部分

    (1)基础语法   (2)操作浏览器对象 BOM   (3)操作文档上的标签 DOM

    3.JS的引入方式

    (1)script标签内写代码   (head和body都可以写)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv-"content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>Title</title>
    <script>
    console.log(123)
    </script>
    </head>
    <body>
    <script>
    console.log(456)
    </script>
    </body>
    </html>

    (2)额外引入JS文件

    html文件代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta http-equiv-"content-Type" charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <title>Title</title>
    <script src="JS.js"></script>
    <script>
    console.log(123)
    </script>
    </head>

    JS文件代码:

    console.log("刘某某");

    4.JS的语言规范

    (1)//  单行注释

    (2)/*   多行注释   */

    (3)IS中要以分号(;)为结束符    每个语句后面都要加

    5.JS的语言基础

    (1)变量声明

    ①JS的变量名可以使用_,数字,字母,$组成,不能以数字开头

    ②声明变量使用    var 变量名;    的格式来命名

    例如:

      var a="alex"

    注意:变量名是区分大小写的

      推荐使用驼峰式命名规则

      保留字不能做变量名

    补充:ES6新增了let命令,用于声明变量,用法类似于var,但是所声明的变量只在let命令所在的代码块内有效

    例如:

      for (let i=0;i<arr.length;i++)

    ES6新增const用来声明常量,一旦声明,其值不能改变

    二.JS的数据类型

    var x;   x是ungefined类型

    var x = "alex";

    var x = 123;

    1.数值 Number

    var a = 123;

    var b = 12.34;

    var c = 123e5;   ====>12300000

    var d = 123e-5;   ====>0.00123

    NAN:表示不是一个数字 (Not A Number)  

    常用方法:

    parseInt("123");    ====>123

    parseInt(12.24);   =====>12

    parseInt("aaa");   =====>NaN

    parseFloat("123.456");   ====>123.456

    2.字符串 String

    var a = "hello";

    var b = "world";

    var c = a+b;   consold.log(c)   ====>"helloworld"

    常用方法:   

    方法

    使用方法

    .length

    返回长度

    .trim()

    移除空白

    .trimLeft()

    移除左边的空白

    .trimRight()

    移除右边的空白

    .charAt(n)

    返回第几个字符

    .concat(value,.....)

    拼接

    .indexof(substring,start)

    子序列位置

    .substring(from,to)

    根据索引获取子序列

    .slice(start,end)

    切片

    .toLowerCase()

    小写

    .toUpperCase()

    大写

    .split(delimiter,limit)

    分割

     

     

     

    (1)substring(from,to)   如果后面的数小于前面的数,就翻转过来进行获取

    var a = "  Hello  World  ";

    a.substring(5,2);      ====> Hel

    (2)slice(start,end)   顾头不顾尾(和python的切片用法一样)

    var a = "  Hello  World  ";

    a.slice(5,-2);       =====> lo  Wor

    如果切片的值大于字符串的长度,就返回空字符串;如果是列表的话,就返回空列表

    (3)indexof(字符串,开始位置)   如果找不到就返回-1

    var x = "abcb";

    var y = "b";

    x.indexof(y);    ====> 1

    x.indexof(y,2);    ====> 3

    (4)split(要以什么切割,返回的个数)

    var a = "  Hello";

    a.split("  ",2);   ====>["","Hello"]

    a.split("",4);     ====>[" "," ","H","e"]

    反引号和格式化  (反引号可以写多行文本)

    var name = "alex";

    var age = 45;

    var s = '我叫${name}';    =====> 我叫alex

    3.布尔值 Boolean

    var a = true;

    var b = false;

    ""(空字符串)    0     null    undefined    NaN    都是false

    null的值表示空,一般在需要指定或清空一个变量时才会使用,var name = null;

    undefined表示当声明一个变量但未初始化,该变量的默认值是undefined  (函数无明确的返回值时,返回的是undefined)

    null表示变量的值是空     undefined表示只声明了变量,但还没有赋值

    4.对象 Object

    (1)允许自定义对象

    (2)数组作用:使用单独的变量名来存储一系列的值

    var a = [123,"ABC"]     console.log(a[1])   ====>"ABC"

    常用方法:

    方法

    使用方法

    .length

    数组的大小

    .push(元素)

    尾部追加元素

    .pop()

    获取尾部的元素

    .unshift(元素)

    头部插入元素

    .shift()

    头部移除元素

    .slice(start,end)

    切片

    .reverse()

    反转

    .join(seq)

    将数组元素连接成字符串

    .concat(value,......)

    连接数组

    .sort()

    排序(默认按ASCii码排)

    .forEach()

    将数组的每个元素传递给回调函数

    .splice()

    删除元素,并向数组添加新元素

    .map()

    返回一个数组元素调用函数处理后的值的新数组

     

     

     

     

    (1)reverse()  数组的反转,直接操作原来的数组

    var a = [11,22,33,44]

    a.reverse()   ====>[44,33,22,11]

    (2)sort()  排序  默认按照ASCII码进行排序

    var a = [11,2,3,1,4]

    a.sort()   ====> [1,11,2,3,4]

    正常排序的代码

    function sortNumber(a,b){

      return a-b

    }

    var arrl = [11,2,3,1,4]

    arrl.sort(sortNumber)

    (3)splic(index,howmany,item1,item2,.....)  删除元素,并在删除元素的位置上添加元素

    var a = [11,22,33,44]

    a.splic(1,1,"aaa,"bbb")   ====>  返回的是删除的元素    22

    console.log(a)    =====> [11,"aaa","bbb",33,44]

    5.类型查询

    typeof是一个一元运算符

    typeof "abc"  ====>atring

    typeof null    ====> object

    typeof NaN  =====> number

    typeof 123  =====>number

    typeof undefined =====>undefined

    typeof true ======> boolean

    6.运算符

    (1)算数运算符: +  -  *  /  %(取余)  ++(加1)  --(减1)

    (2)比较运算符:>  >=  <  <=  !=  ==  ===  !==

    ==:弱等于  会将两个数类型转换成一致,才进行判断

    ===:强等于  既判断数值相不相等,还会判断类型相不相等

    !=:弱不等于  判断两个数值相不相等,类型不相等也会转换成一致的进行比较

    !==:强不等于  既判断数值相不相等,还会判断类型相不相等 

    (3)逻辑运算符:&&(and)  ||(or)  !(not)

    (4)赋值运算符:=  +=  -=  *=  /=

    7.流程控制

    if-else:

    var a = 10;

    if (a>5){

      console.log("true");

    }else{

      console.log("false");

    }

    if-else if-else:      else if(相当于python中的elif)

    var a =10;

    if (a>5){

      console.log("a>5");

    }else if(a<5){

      console.log("a<5");

    }else{

      console.log("a=5");

    }

    switch:  case子句中通常都会加break语句,否则程序会继续执行后续的case中的语句

    var day = new Date().getDate();

    switch (day){

      case 0:

      console.log("Sunday");

      break;

      case 1:

      console.log("Monday");

      break;

      default:

      console.log("Friday");

    }

    for循环

    例子1:循环0-9

    for (var i = 0; i < 10;i++){

      console.log(i);

    }

    例子2:循环列表

    var a = [11,22,33,44]

    for (var i = 0; i < a.length;i++){

      console.log(a[i]);

    }

    while循环

    var a = 0;

    while (a<10){

      console.log(a);

      a++;

    }

    三元云算法

    var a = 1;

    var b = 2;

    var c = a > b ? a : b;

    python中的三元运算:

    a = 1

    b = 2

    c = a if a>b else b

    三.函数

    1.函数的定义

    (1)普通的函数:

    <script>
    function f(){
    console.log("Hello World");
    }
    f()
    </script>

    (2)带参数的函数:

    <script>
    function f(a,b){
    console.log(arguments); //内置的arguments的对象 可以拿到所有元素,通过索引值进行操作
    console.log(arguments.length); //拿到元素的长度
    console.log(a,b);
    }
    f(45,23)
    </script>

    (3)带返回值IDE函数:

    <script>
    function sum(a,b){
    return a+b;
    }
    console.log(sum(4,5));
    </script>

    (4)匿名函数: 潜入别的方法中使用

    <script>
    var a = function(a,b){
    return a + b;
    };
    console.log(a(4,3));
    </script>

    (5)自执行函数(立即执行函数):变量的私有化,不会影响全局,这个函数执行完之后就立即销毁,不会像其它函数一样可以继续调用

    <script>
    (function(a,b){
    return a+b;
    })(1,2);
    </script>

    window就是一个全局(窗口)

    2.匿名函数

    (1)forEach   (function (传递的元素参数,索引,元素所属的数组对象))

    <script>
    var a = [11,22,33,44,55];
    a.forEach(function (i,a) {
    console.log(i,a);
    })
    </script>

    (2)map  (function(传递元素参数,索引,元素所属的数组对象))

    <script>
    var a =[11,22,33,44,55];
    a.map(function (i) {
    console.log(i+1);
    });
    </script>

    函数的个别问题:

    (1)函数不传参,返回NaN

    <script>
    function f(a,b) {
    console.log(a+b);
    }
    f()
    </script>

    (2)不管写多少个返回值,默认返回最后一个,如果要返回多个值,要将其放在数组或对象中

    <script>
    function bar(){
    return 10,20,30
    }
    console.log(bar())
    </script>

    (3)传多个参数,从头开始数,只用需要的几个

    <script>
    function foo(a,b){
    return a+b
    }
    console.log(foo(10,20,300));
    </script>

    (4)内置的arguments对象

    <script>
    function mysum(a,b){
    var ret = 0;
    for (var i = 0;i<arguments.length;i++){
    ret += arguments[i];
    }
    console.log(ret);
    }
    mysum(10,20,30);
    </script>

    console.log(arguments)  ====>打印出来的是一个列表,里面是穿的参数

    3.箭头函数 (=>)   在ES6中使用    箭头函数是匿名函数的简写,箭头函数的this是固定

    <script>
    var a = [11,22,33,44,55];
    a.forEach((i)=>{
    console.log(i);
    })
    </script>

    循环打印出a里面的内容

    4.函数的全局变量和局部变量

    在函数内部可以调用函数外部的变量,但是在函数外部不能找函数内部的变量

    例子一

      function f(){ var x1 = 100;} x1     会报错,因为外不能调用函数内部的变量

    例子二

      var x2 = 100; function f2(){ console.log(x2);}     打印出来是100   因为内部可以调用函数外部的变量

    5.词法分析

    在函数调用的前一瞬间,会先形成一个激活对象AO,并会分析一下3个方面:

    (1)函数参数:如果有,则将此参数赋值给AO,且值为undefined;如果没有,则不做任何操作

    (2)函数局部变量:如果AO上有同名的值,则不作任何操作;如果没有,则将此变量赋值给AO,并且值为undefined

    (3)函数声明:如果AO上有,则会将AO上的对象覆盖;如果没有,则不作任何操作

    函数内部无论是使用参数还是使用局部变量都到AO上找

    例子1:

    var age = 18;
    function foo(){
    console.log(age);
    var age = 22;
    console.log(age);
    }
    foo();

    在调用函数的前一瞬间,对整个函数进行词法分析:

    (1)首先该函数没有参数,没有函数声明,但是有局部变量,但是此时没有与AO同名的值,所以AO.age = undefined,此时词法分析结束

    (2)第一个console.log(age)去AO里面找值,此时AO.age = undefined;所以打印出来的是undefined

    (3)执行到var age = 22;的时候,将age =22的值赋值给AO.age,所以打印出来的是22

    例子2:

    var age = 18;
    function foo(){
    console.log(age);
    var age = 22;
    console.log(age);
    function age(){
    console.log("呵呵");
    }
    console.log(age);
    }
    foo(); // 执行后的结果是?

    在调用函数的前一瞬间,进行词法分析

    (1)首先该函数没有参数,有函数的局部变量,但是没有与AO同名的值,此时AO.age = unndefined;

    (2)该函数中有函数声明,会将AO上的对象给覆盖,所以AO.age = 那个函数声明,此时词法分析结束

    (3)执行第一个console.log(age);的时候去AO里面找,所以打印出来的是函数声明

    (4)执行到var age = 22;的时候,将22赋值给AO.age,所以打印出来的是22

    (5)执行到最后一个console.log(age)的时候,去AO里面找,此时AO.age = 22,所以打印出来的也是22

    6.内置对象和方法

    JS中所有事物都是对象:字符串,数字,数组等都是对象

    (1)自定义对象

    JS的对象的本质上是键值对的集合(Hash结构),但是只能用字符串作为键

    ①自定义对象的两种方式: a["name"]    a.name

    方式一:

    <script>
    var a = {"name":"alex","age":18};
    console.log(a.name);
    console.log(a.age);
    </script>

    方式二:

    <script>
    var person = new Object();
    person.name = "alex";
    person.age = 18;
    </script>

    遍历对象中的内容

    <script>
    var a = {"name":"alex","age":18};
    for (var i in a){
    console.log(i,a[i]);
    }
    </script>

    ②创建对象

    <script>
    var person = new Object();
    person.name = "alex";
    person.age = 18;
    </script>

    7.继承

    (1)父类的构造方法

        var Person = function(dream){
    this.dream = dream;
    };

    (2)父类方法

        Person.prototype.makeDream = function(){
    console.log("做白日梦");
    };

    (3)子类构造方法

        var Yellow = function(dream){
    Person.call(this,dream)
    };

    (4)继承父类方法

        Yellow.prototype = Object.create(Person.prototype);

    (5)修复constructor

        Yellow.prototype.constructor = Yellow;

    (6)子类方法(自己独有的)

        Yellow.prototype.sing = function(){
    console.log("龙的传人")
    };

    (7)实例化对象,调用方法

        var p1 = new Person("咸鱼翻身");
    console.log(p1.dream);
    p1.makeDream();
    var p2 = new Yellow("没有蛀牙");
    console.log(p2.dream);
    p2.makeDream();
    p2.sing();

    8.Date对象

    (1)不指定参数

    var d1 = new Date();
    console.log(d1.toLocaleString());

    (2)参数为日期字符串

    var d2 = new Date("2004/3/20 11:12");
    console.log(d2.toLocaleString());
    var d3 = new Date("04/03/20 11:12");
    console.log(d3.toLocaleString());

    (3)参数为毫秒数

    var d3 = new Date(5000);
    console.log(d3.toLocaleString());
    console.log(d3.toUTCString());

    (4)参数为年月日小时分钟秒毫秒

    var d4 = new Date(2004,2,20,11,12,0,300);
    console.log(d4.toLocaleString()); //毫秒并不直接显示

    Date对象的方法:

    var d = new Date(); 
    //getDate()                 获取日
    //getDay ()                 获取星期
    //getMonth ()               获取月(0-11)
    //getFullYear ()            获取完整年份
    //getYear ()                获取年
    //getHours ()               获取小时
    //getMinutes ()             获取分钟
    //getSeconds ()             获取秒
    //getMilliseconds ()        获取毫秒
    //getTime ()                返回累计毫秒数(从1970/1/1午夜)

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

    10.RegExp对象

    (1)两种创建正则表达式的方式     d需要在浏览器里面转义:\d

    第一种:

    <script>
    var r = new RegExp('^1[3-9][0-9]{9}$');
    console.log(r.test("18812341234"));
    </script>

    第二种:

    <script>
    console.log(/^1[3-9][0-9]{9}$/.test("18812341234"));
    </script>

    三个注意事项:

    ①test()不传值相当于传了一个undefined,undefined会被当成字符串形式的"undefined"来处理

    ②正则表达式中间不要加空格

    ③注意全局匹配模式g的lastIndex属性

    例子一:

    <script>
    var r = new RegExp('^[a-zA-Z][a-zA-Z0-9]{5,11}$');
    console.log(r.test("yingying")); true
    console.log(r.test()); true
    console.log(r.test(undefined)); true
    console.log(r.test("undefined")); true
    var r1 = new RegExp('^[0-9]$');
    console.log(r1.test()); false
    console.log(r1.test(undefined)); false
    console.log(r1.test("undefined")); false
    </script>

    例子二: i是忽略大小写的匹配模式     g表示全局匹配模式

    <script>
    var s = "ying YING";
    console.log(s.replace("i","哈哈"));
    console.log(s.replace(/i/,"嘿嘿"));
    console.log(s.replace(/y/i,"呵呵"));
    console.log(s.replace(/Y/i,"啦啦"));
    console.log(s.replace(/y/gi,"哼哼"));
    </script>

    例子三:正则表达式加上g就会记录一个lastIndex属性,用来记录下一次从哪里开始匹配

    <script>
    var r = /alex/g;
    console.log(r.test("alex")); true
    console.log(r.test("alex")); false
    console.log(r.test("alex")); true
    console.log(r.lastIndex); 4
    console.log(r.test("alex")); false
    console.log(r.lastIndex); 0
    </script>

    11.Math对象

    abs(x) 返回数的绝对值。
    exp(x) 返回 e 的指数。
    floor(x) 对数进行下舍入。
    log(x) 返回数的自然对数(底为e)。
    max(x,y) 返回 x 和 y 中的最高值。
    min(x,y) 返回 x 和 y 中的最低值。
    pow(x,y) 返回 x 的 y 次幂。
    random() 返回 0 ~ 1 之间的随机数。
    round(x) 把数四舍五入为最接近的整数。
    sin(x) 返回数的正弦。
    sqrt(x) 返回数的平方根。
    tan(x) 返回角的正切。

    例子:任意随机小数

    <script>
    function myRandom(a,b){
    return Math.random()*(b-a)+a
    }console.log(myRandom(4,7))
    </script>
  • 相关阅读:
    10分钟教你用VS2017将代码上传到GitHub
    【算法】C++用链表实现一个箱子排序附源代码详解
    【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解
    【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)
    【python】10分钟教你用python如何正确把妹
    【python】10分钟教你用python一行代码搞点大新闻
    【python】10分钟教你用python下载和拼接微信好友头像图片
    3. powerdesigner 生成mysql脚本,要求字段、表名有注释
    5. 回填表格复选框
    14. js字符串截取substring用法
  • 原文地址:https://www.cnblogs.com/lhy979/p/9585914.html
Copyright © 2020-2023  润新知