• 前端基础之JavaScript


    JavaScript的两种引入方式:


    一 直接在Script标签内写JS代码
        <script>
          //在这里写你的JS代码
        </script>   
    
    二 文件方式引入
    
    <script src="myscript.js"></script>

    JavaScript的语法规范:

        注释(注释是代码之母)
    // 这是单行注释 /* 这是 多行注释 */

    结束符
    JavaScript中的语句要以分号(;)为结束符

    变量

    JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
    声明变量使用 var 变量名; 的格式来进行声明
          var name = "Alex";
          var age = 18;
    注意:
    
        变量名是区分大小写的。
    
        推荐使用驼峰式命名规则。
        
        保留字不能用做变量名。
    
    补充:
    
          ES6新增了let命令,用于声明变量。其用法类似于var,但是所声明的变量只在let命令所在的代码块内有效。例如:for循环的计数器就很适合使用let命令。
    
    for (let i=0;i<arr.length;i++){...}
    
    ES6新增const用来声明常量。一旦声明,其值就不能改变。
    
    const PI = 3.1415;
    PI // 3.1415
    
    PI = 3
    // TypeError: "PI" is read-only

    补充:

    abstract
    boolean
    byte
    char
    class
    const
    debugger
    double
    enum
    export
    extends
    final
    float
    goto
    implements
    import
    int
    interface
    long
    native
    package
    private
    protected
    public
    short
    static
    super
    synchronized
    throws
    transient
    volatile    
    关键字

    数据类型:

    JavaScript拥有动态类型
    
    var x;  // 此时x是undefined
    var x = 1;  // 此时x是数字
    var x = "Alex"  // 此时x是字符串 
    数值(Number)
    JavaScript不区分整型和浮点型,就只有一种数字类型。
    
    var a = 12.34;
    var b = 20;
    var c = 123e5;  // 12300000
    var d = 123e-5;  // 0.00123
    还有一种NaN,表示不是一个数字(Not a Number)。
    
    常用方法:
    
      parseInt("123")  // 返回123
      parseInt("ABC")  // 返回NaN,
      NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
    
      parseFloat("123.456")  // 返回123.456
    
      字符串(String)
      var a = "Hello"
      var b = "world;
      var c = a + b; 
      console.log(c);  // 得到Helloworld
    .length        返回长度
    .trim()        移除空白
    .trimLeft()        移除左边的空白
    .trimRight()   移除右边的空白
    .charAt(n)        返回第n个字符
    .concat(value, ...)    拼接
    .indexOf(substring, start)    子序列位置
    .substring(from, to)            根据索引获取子序列
    .slice(start, end)            切片
    .toLowerCase()            小写
    .toUpperCase()            大写
    .split(delimiter, limit)    分割                    
    js字符串的常用方法

    拼接字符串一般使用“+”

    // 字符串中嵌入变量
    var name = "jason", time = "today";
    `Hello ${name}, how are you ${time}?`

    注意:

      如果模板字符串中需要使用反引号,则在其前面要用反斜杠转义。

    布尔类型:

    区别于Python,true和false都是小写。
    
    var a = true;
    var b = false;
    ""(空字符串)、0、null、undefined、NaN都是false。
    
    null和undefined
    null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
    undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
    null表示变量的值是空(null可以手动清空一个变量的值,使得该变量变为object类型,值为null),undefined则表示只声明了变量,但还没有赋值

    对象(Object)

    JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。
    
    JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
    
    对象只是带有属性和方法的特殊数据类型。

    数组

    数组对象的作用是:使用单独的变量名来存储一系列的值。类似于Python中的列表。

    var a = [123, "ABC"];
    console.log(a[1]);  // 输出"ABC"
    
    循环打印数组里的值:
    
    for (let i=0;i<a.length;i++){
        console.log(i,a[i])
    }

     数组的一些常用方法:

    .length            数组的大小
    .push(ele)            尾部追加元素
    .pop()            获取尾部的元素
    .unshift(ele)    头部插入元素
    .shift()            头部移除元素
    .slice(start, end)    切片
    .reverse()            反转
    .join(seq)            将数组元素连接成字符串
    .concat(val, ...)    连接数组
    .sort()            排序
    .forEach()            将数组的每个元素传递给回调函数
    .splice()        删除元素,并向数组添加新元素。
    .map()            返回一个数组元素调用函数处理后的值的新数组        
    方法

    forEach()

      语法:
    
          forEach(function(currentValue, index, arr), thisValue)
    
      参数:
    
          function(currentValue, index, arr)
    
            currentValue:必需。当前元素
    
            index:可选。当前元素的索引值
      
            arr:可选。当前元素所属的数组对象。




      

     splice()

    语法:
    
      splice(index,howmany,item1,.....,itemX)
    
    参数:
      index 
      必需。规定从何处添加/删除元素。
      该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
      howmany
      必需。规定应该删除多少元素。必须是数字,但可以是 "0"。
      如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
      item1, ..., itemX
      可选。要添加到数组的新元素

    map()

    语法:
    
      map(function(currentValue,index,arr), thisValue)
    
      必须。函数,数组中的每个元素都会执行这个函数
      函数参数:
    参数:
    
      currentValue  :必须。当前元素的值
      index:    可选。当期元素的索引值
      arr:可选。当期元素属于的数组对象

    类型查询
    typeof "abc"  // "string"
    typeof null  // "object"
    typeof true  // "boolean"
    typeof 123 // "number"

    对变量或值调用 typeof 运算符将返回下列值之一:

    undefined - 如果变量是 Undefined 类型的
    boolean - 如果变量是 Boolean 类型的
    number - 如果变量是 Number 类型的
    string - 如果变量是 String 类型的
    object - 如果变量是一种引用类型或 Null 类型的
    运算符

    算数运算符

    + - * / % ++ --
    var x=10;
    var res1=x++;
    var res2=++x;
    
    res1;
    10
    res2;
    12
    
    这里由于的x++和++x在出现赋值运算式,x++会先赋值再进行自增1运算,而++x会先进行自增运算再赋值!

    比较运算符

    > >= < <= != == === !==
    
    
    注意:
    1 == “1”  // true  弱等于
    1 === "1"  // false 强等于
    //上面这张情况出现的原因在于JS是一门弱类型语言(会自动转换数据类型),所以当你用两个等号进行比较时,JS内部会自动先将
    //数值类型的1转换成字符串类型的1再进行比较,所以我们以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误

    赋值运算符
    = += -= *= /=


    逻辑运算符
    && || !

      


    流程控制:
    #if else
    
    var a = 10;
    if (a > 5){
      console.log("yes");
    }else {
      console.log("no");
    }
    
    
    #else if 
    var a = 10;
    if (a > 5){
      console.log("a > 5");
    }else if (a < 5) {
      console.log("a < 5");
    }else {
      console.log("a = 5");
    }

    
    

     switch

    
    
    var day = new Date().getDay();
    switch (day) {
      case 0:
      console.log("Sunday");
      break;
      case 1:
      console.log("Monday");
      break;
    default:
      console.log("...")
    }

    
    

     for

    前面在数组取值时我们用到for 遍历数组,再将值打印出来

    for (let i=0;i<a.length;i++){
        console.log(i,a[i])
    }
    for (let i=0;i<a.length;i++){
        console.log(i,a[i])
    }
     
    while
    var i=0;
    while (i<10){
    console.log(i);
    i++
    }
     三元运算符:

     

    var a = 1;
    var b = 2;
    var c = a > b ? a : b
    //这里的三元运算顺序是先写判断条件a>b再写条件成立返回的值为a,条件不成立返回的值为b;三元运算可以嵌套使用;
    var a=10,b=20;
    var x=a>b ?a:(b=="20")?a:b;
    
    
    x
    10

    函数

    #定义函数

    // 普通函数定义
    function f1() {
      console.log("Hello world!");
    }
    
    // 带参数的函数
    function f2(a, b) {
      console.log(arguments);  // 内置的arguments对象
      console.log(arguments.length);
      console.log(a, b);
    }
    
    // 带返回值的函数
    function sum(a, b){
      return a + b;
    }
    sum(1, 2);  // 调用函数
    
    // 匿名函数方式
    var sum = function(a, b){
      return a + b;
    }
    sum(1, 2);
    
    // 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
    (function(a, b){
      return a + b;
    })(1, 2);


    箭头函数
    var f = v => v*2;
    // 等同于
    var f = function(v){
      return v;
    }

     

    如果箭头函数不需要参数或需要多个参数,就是用圆括号代表参数部分:

    var f = () => 5;
    // 等同于
    var f = function(){return 5};
    
    var sum = (num1, num2) => num1 + num2;
    // 等同于
    var sum = function(num1, num2){
      return num1 + num2;  //这里的return只能返回一个值,如果想返回多个值需要自己手动给他们包一个数组或对象中
    }

    函数中的arguments参数

    function add(a,b){
      console.log(a+b);
      console.log(arguments.length);//得到传入的参数个数
     console.log(arguments[0]);//arguments相当于将出传入的参数全部包含,这里取得就是第一个元素1
    }
    
    add(1,2)

    注意:

    函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。

    
    

     

    内置对象和方法

     

    JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。

    我们在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象、String对象、Array对象等。

     自定义对象

    var a = {"name": "Alex", "age": 18};
    console.log(a.name);
    console.log(a["age"]);

    遍历对象中的内容:
    var a = {"name": "Alex", "age": 18}; for (var i in a){ console.log(i, a[i]); }

     创建对象:

    var person=new Object();  // 创建一个person对象
    person.name="Alex";  // person对象的name属性
    person.age=18;  // person对象的age属性

    创建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午夜)

    练习:

    编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出。

    const WEEKMAP = {
      0:"星期天",
      1:"星期一",
      2:"星期二",
      3:"星期三",
      4:"星期四",
      5:"星期五",
      6:"星期六"
    };  //定义一个数字与星期的对应关系对象
    
    
    function showTime() {
        var d1 = new Date();
        var year = d1.getFullYear();
        var month = d1.getMonth() + 1;  //注意月份是从0~11
        var day = d1.getDate();
        var hour = d1.getHours();
        var minute = d1.getMinutes()
    
        var week = WEEKMAP[d1.getDay()];  //星期是从0~6
    
        var strTime = `
        ${year}-${month}-${day} ${hour}:${minute} ${week}
        `;
        console.log(strTime)
    };
    
    showTime();
    xxxx-xx-xx xx:xx 星期x

    RegExp对象

    // 定义正则表达式两种方式
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
    var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;
    
    // 正则校验数据
    reg1.test('jason666')
    reg2.test('jason666')
    
    /*第一个注意事项,正则表达式中不能有空格*/ 
    
    // 全局匹配
    var s1 = 'egondsb dsb dsb';
    s1.match(/s/)
    s1.match(/s/g)
    var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
    reg2.test('egondsb');
    reg2.test('egondsb');
    reg2.lastIndex;
    /*第二个注意事项,全局匹配时有一个lastIndex属性*/
    
    // 校验时不传参数
    var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
    reg2.test();
    reg2.test(undefined);
    
    var reg3 = /undefined/;
    reg3.test();
  • 相关阅读:
    [禅悟人生]如春风般吹开他人冬眠的良心
    [禅悟人生]先学做人, 再学做佛
    [禅悟人生]悟得自性则天地开阔
    [禅悟人生]"执著"是自缚的茧
    [禅悟人生]时常自省, 扫却心中尘埃
    [禅悟人生]心不动才能真正认清自己
    [禅悟人生]自卑裹足不前, 就无法成就自己
    [禅悟人生]有自知之明, 在深浅之间权衡做人
    禅悟人生目录
    [禅悟人生]认识自己才能了解外部世界
  • 原文地址:https://www.cnblogs.com/tuzaizi/p/10957400.html
Copyright © 2020-2023  润新知