• JS初识


    一、JS (JavaScript) 引入方式

    1、Script 标签内写代码

     <script>
           // 在这里写JS代码
        </script>

    2、引入额外的JS文件

     <script src="myscript.js"></script>

    二、JavaScript语言规范

    1、注释

    // 这是单行注释
    
    /*
    这是
    多行
    注释
    */

    2、结束符

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

    三、JavaScript语言基础

    变量声明

    1、变量名可以使用字母、数字、_、$组成,不能以数字开头。

    2、声明变量使用 var 变量名; 的格式来进行声明。

    var name = "alex";
    var age = 18;

    注意:变量名是区分大小写的。       推荐使用驼峰式命名规则。

    四、JavaScript 数据类型

    1、JavaScript 拥有动态类型

    var x;  // 此时x是undefined
    var x = 1;  // 此时x是数字
    var x = "alex"  // 此时x是字符串

    2、数字类型

    JavaScript 不区分整型和浮点型,就只有一种数字类型。

    var a = 12.34;
    var b = 20;
    var c = 123e5;  // 12300000
    var d = 123e-5;  // 0.00123

    常用方法:

    parseInt("123");  // 返回123
    parseInt("ABC");  // 返回NaN,NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字
    parseFloat("123.456");  // 返回123.456

    3、字符串

    var a = "Hello";
    var b = "word";
    var c = a + b;
    console.log(c);  // 结果是 Helloword

    常用方法:

    方法 说明
    obj.length 返回长度
    obj.trim() 移除空白
    obj.trimLeft() 移除左边的空白
    obj.trimRight() 移除右边的空白
    obj.charAt(n) 返回第n个字符
    obj.concat(value,........) 拼接
    obj.indexOf(变量名,开始位置) 子序列位置
    obj.substring(from, to) 根据索引获取子序列
    obj.slice(start, end) 切片
    obj.toLowerCase() 小写
    obj.toUpperCase() 大写
    obj.split(delimiter, limit) 分割

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

    4、布尔类型

    区别于Python,true 和 false都是小写。

    var a = true;
    var b = false;

    5、数组

    类似于Python中的列表。

    var a = [123,"ABC"];
    console.log(a);  // 输出"ABC"

    常用方法:

    方法 说明
    obj.length 数组的大小
    obj.push(ele) 尾部追加元素
    obj.pop() 获取尾部元素
    obj.unshift(ele) 头部插入元素
    obj.shift() 头部移除元素
    obj.slice() 切片
    obj.reverse() 反转
    obj.join(seq) 将数组元素链接成字符串
    obj.concat(value, .........) 连接数组
    obj.sort() 排序

    遍历数组中的元素:

    var a = [10, 20, 30, 40];
    for (var i = 0; i<a.length; i++) {
        console.log(i);  // 结果是 0 1 2 3 遍历的是数组的下标
        console.log(a[i]);  // 结果是 0 10 1 20 2 30 3 40 遍历的是整个数组,且是类似键值对的对应输出
    }

    6、null 和 undefined 

    • undefined 表示的是当声明的变量未初始化时,该变量的默认值是 undefined 。还有就是函数无明确的返回值时,返回的也是 undefined。
    • null 表示值不存在。

    undefined 表示什么了变量,但是还没有赋值。null 声明了变量且变量值为空。

    7、类型查询

    typeof "abc";  // "string"
    typeof null;  // "object"
    typeof true;  // "boolean"
    typeof 123;  // "number"

    typeof 是一个一元运算符 (就像 ++,!,-等一元运算符),不是一个函数,也不是一个语句。

    五、运算符

    1、算数运算符

    + - * / % ++ --

    2、比较运算符

    > < >= <= != == === !==

    注意:

    1 =="1";  // true
    1 === "1";  // false

    3、逻辑运算符

    && // 逻辑与
    ||  // 逻辑或
    !  // 逻辑非

    4、赋值运算符

    = += -= *= /=

    六、流程控制

    1、if-else

    var a = 10;
    if (a > 5) {
        console.log("yes");
    }else {
        console.log("no");
    }  // 结果是 yes

    2、if-else if-else

    var a = 10;
    if (a > 5) {
        console.log("a > 5");
    }else if (a < 5) {
        console.log("a < 5");
    }else {
        console.log("a = 5");
    }  // 结果是 a > 5

    3、switch

    var day = new Date().getDay();
    switch (day) {
        case 0:console.log("星期日");break;
        case 1:console.log("星期一");break;
        case 2:console.log("星期二");break;
        case 3:console.log("星期三");break;
        case 4:console.log("星期四");break;
        case 5:console.log("星期五");break;
        case 6:console.log("星期六");break;
    }

    4、for

    for (var i = 0;i < 10;i++) {
        console.log(i);
    }  // 结果是 0 1 2 3 4 5 6 7 8 9

    5、while

    var i = 0;
    while (i < 10) {
        console.log(i);
        i++;
    }  // 结果是 0 1 2 3 4 5 6 7 8 9

    6、三元运算

    // 条件 ? 值1 : 值2        如果条件为真,则结果为 值1,否则结果是 值2
    var a = 1;
    var b = 2;
    var c = a > b ? a : b
    console.log(c);  // 结果是 2

    七、函数

    1、函数定义

    // 普通函数定义
    function f1(){
        console.log("Hello world!");
    }
    f1();  // 结果是 Hello world!
    
    // 带参数的函数
    function f2(arg1,arg2) {
        console.log(arg1, arg2);
    }
    f2("alex", "特斯拉");  // 结果是 alex 特斯拉
    
    // 带返回值的函数
    function f3(rag1,rag2) {
        return rag1 + rag2;
    }
    f3(1,3);  // 结果是 4
    
    // 匿名函数
    var sum = function (a, b) {
        return a + b;
    }
    sum(2,3);  // 结果是 5
    
    // 立执行函数
    (function f4(a,b) {
        return a + b;
    })(2,4);  // 结果是 6

    2、函数的全局变量和局部变量

    局部变量:

      在JavaScript 函数内部声明的变量(使用 var)是局部变量,所有只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

    全局变量:

      在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

    变量生存周期:
      JavaScript 变量的生命周期从它们被声明的时间开始。

      局部变量会在函数运行完之后被删除。

      全局变量会在页面关闭之后被删除。

    3、作用域

      首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

    例子:

    1、

    var city = "beijing";
    function f5() {
        var city = "shanghai";
        function inner() {
            var city = "shenzhen";
            console.log(city);
        }
        inner();
    }
    f5();  // 结果是 shenzhen

    2、

    var city = "beijing";
    function bar() {
        console.log(city);
    }
    function f6() {
        var city = "shanghai";
        return bar;
    }
    var ret = f6();
    ret();  // 结果是 beijing

    3、闭包

    var city = "beijing";
    function f7() {
        var city = "shanghai";
        function inner() {
            console.log(city);
        }
        return inner;
    }
    var ret = f7();
    ret();  // 结果是 shanghai

    八、内置对象和方法

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

    1、自定义对象

    类似于(某方面类似)Python中的字典数据类型

    var a = {"name":"alex", "age":18};
    console.log(a.name);  // 结果是 alex
    console.log(a["age"]);  // 结果是 18

    遍历对象中的内容:

    var a = {"name":"alex", "age":18};
    for (var i in a ) {
        console.log(i);
    }  // 结果是 name age  此时遍历的只是对象中的各个键

     创建对象:

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

    扩展:

    // 父类构造函数
    var fatherClass = function (loc) {
        this.loc = loc;
    };
    
    // 父类方法
    fatherClass.prototype.move = function() {
        this.loc ++;
    };
    
    // 子类构造函数
    var childClass = function (loc) {
        childClass(this,loc);
    };
    
    // 继承父类的方法
    childClass.prototype = Object.create(fatherClass.prototype);
    
    // 修复 constructor
    childClass.prototype.constructor = fatherClass;
    
    // 扩展方法
    childClass.prototype.grab = function () {
        /*............*/
    };
    JavaScript 面向对象之继承

    2、Date对象

     创建Date对象

    // 方法1:不指定参数
    var d1 = new Date();
    console.log(d1.toLocaleString());  // 结果是 2017/12/28 下午3:44:48
    
    // 方法2:参数为日期字符串
    var d2 = new Date("2018/1/1 11:11:11");
    console.log(d2.toLocaleString());  // 结果是 2018/1/1 上午11:11:11
    
    var d3 = new Date("17/01/01 11:12:12");
    console.log(d3.toLocaleString());  // 结果是 Invalid Date
    
    // 方法3:参数为毫秒数
    var d4 = new Date(5000000000000);
    console.log(d4.toLocaleString());  // 结果是 2128/6/11 下午4:53:20
    console.log(d4.toUTCString());  // 这是UTC时间 结果是 Fri, 11 Jun 2128 08:53:20 GMT
    
    // 方法4:参数为年月日小时分钟秒毫秒
    var d5 = new Date(2018,1,1,11,11,11,11);
    console.log(d5.toLocaleString());  // 毫秒并不直接显示  结果是 2018/2/1 上午11:11:11

    Date对象的方法:

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

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

    //将当前日期输出为“2017-12-27 11:11 星期三”格式
    function getNow() {
        var d = new Date();
        var dYear = d.getFullYear();
        var dMonth = d.getMonth();
        var dDay = d.getDate();
        var dHour = d.getHours();
        var dminute = d.getMinutes();
        var dweek = d.getDay();
        switch (dweek) {
            case 0:dweek = "星期日";break;
            case 1:dweek = "星期一";break;
            case 2:dweek = "星期二";break;
            case 3:dweek = "星期三";break;
            case 4:dweek = "星期四";break;
            case 5:dweek = "星期五";break;
            case 6:dweek = "星期六";break;
        }
        if (dminute<10) {
            dminute = "0" + dminute;
        }
        return (dYear + "-" + (dMonth+1) + "-" + dDay + " " + dHour + ":" + dminute + dweek);
    }
    ret = getNow();
    console.log(ret);

    3、JSON 对象

     JSON能够实现序列化和反序列化

    var a = {"name":"alex","age":38};
    // 序列化
    var s = JSON.stringify(a);
    console.log(a, typeof(a));  // 结果是 {name: "alex", age: 38} "object"
    console.log(s, typeof(s));  // 结果是 {"name":"alex","age":38} string
    
    // 反序列化
    var obj = JSON.parse(s);
    console.log(obj, typeof(obj));  // 结果是 {name: "alex", age: 38} "object"

    4、RegExp 对象

     与正则表达式相关

    // 定义方式1:"第一个参数:正则表达式","第二个参数:匹配模式g(全局匹配)或i(忽略大小写)"
    var r1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$","g");
    var s1 = "alex123";
    var s2 = "123alex";
    console.log(r1.test(s1));  // 结果是 true
    console.log(r1.test(s2));  // 结果是 false
    // 定义方式2:/第一个参数:正则表达式/第二个参数:匹配模式g(全局匹配)或i(忽略大小写)
    var r2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
    console.log(r2.test(s1));  // 结果是 true
    console.log(r2.test(s2));  // 结果是 false

    注意:在使用 g 的时候是全局匹配,但是如果连续两次对同一个变量使用 test 时,第一次 test 是从索引为0 的地方开始匹配的,但是第二次使用 test 的时候就是从索引为1的地方开始对变量进行正则匹配的。

    5、Math 对象

    // asb(x)                  返回 x 的绝对值
    // exp(x)                  返回e的指数(返回的其实就是e的x次方的值)
    // floor(x)                对 x 进行下舍入(向下取整)
    // log(x)                  返回 x 的自然对数(低为e)
    // max(x,y)                返回 x 和 y 中的最高值
    // min(x,y)                返回 x 和 y 中的最小值
    // pow(x,y)                返回 x 的 y 次幂
    // random()                返回0-1之间的随机数
    // round(x)                把 x 四舍五入为最接近的整数
    // sin(x)                  返回 x 的正弦
    // sqrt(x)                 返回 x 的平方根
    // tan(x)                  返回角 x 的正切
  • 相关阅读:
    Java之内存分析和String对象
    Android之MVC模式
    Java之排序总结
    Android之单元测试学习
    Silverlight 拖拽功能
    Silverlight 调用WebServices
    Silverlight IIS 7.5 部署SilverLight4网站以及问题解决
    Silverlight 控件和对话框 源自MSDN 参考
    Silverlight 动画示例
    Sliverlight 动画详细介绍
  • 原文地址:https://www.cnblogs.com/hzhcdhm/p/8126906.html
Copyright © 2020-2023  润新知