• JavaScript基础


    JavaScript

      JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
      在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为NetscapeSun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与SelfScheme较为接近。
      为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript

    组成部分

    javascript组成

    ECMAScript,描述语法和基本对象。

    文档对象模型(DOM),描述处理网页内容的方法和接口。

    浏览器对象模型(BOM),描述与浏览器进行交互的方法接口

    JavaScript引入方式

    Script标签内引入

    <script>
        alert("123");
    </script>

    引入外部的JS文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JS引入</title>
    </head>
    <body>
    <script src="MyJS.js"></script>
    </body>
    </html>

    JavaScript基础

    注释

    // 单行注释
    /* 多行注释 */

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

    变量声明

    1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
    2. 声明变量使用 var 变量名; 的格式来进行声明
    var name="JavaScript";

    注意:

    变量名是区分大小写的。

    推荐使用驼峰式命名规则。

    保留字不能用做变量名。

    JavaScript数据类型

    动态类型

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

    数值(Number)

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

    // 数字类型
    var n1=18;
    var n2=18.1;
    var n3=1.81e5;
    var n4=NaN;  // Not a Number

    字符串(string)

    var s1="A";
    var s2="B";
    var s3 = s1 + s2;  // 字符串拼接用+
    console.log(s3);

    常用方法

    可以直接在浏览器界面中console进行验证查看

    slice和substring的区别

    string.slice(start, stop)和string.substring(start, stop):

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

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

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

    布尔值(Boolean)

    var a = true;
    undefined
    var b = false;
    undefined

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

    null和undefined

    • null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;
    • undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。

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

    对象(Object)

    JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

    JavaScript 提供多个内建对象,比如 String、Date、Array 等等。

    对象只是带有属性和方法的特殊数据类型。

    数组

    常用方法

    关于sort()需要注意:

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

    如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。
    若 a 大于 b,则返回一个大于 0 的值。

     示例:

    遍历数组中的元素

    forEach()

     语法

    forEach(function(currentValue, index, arr), thisValue)

    参数

    splice()

    语法

    splice(index,howmany,item1,.....,itemX)

    参数

    map()

    语法

    map(function(currentValue,index,arr), thisValue)

    参数

    类型查询

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

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

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

     运算符

    算数运算符

    + - * / % ++ --

    比较运算符

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

    注意:

    1 == “1”  // true
    1 === "1"  // false

    逻辑运算符

    && || !

    赋值运算符

    = += -= *= /=

     流程控制

    if-else

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

    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");
    }

    switch

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

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

    for

    for (var i=0;i<10;i++) {
      console.log(i);
    }

    while

    var i = 0;
    while (i < 10) {
      console.log(i);
      i++;
    }

    三元运算

    var a = 1;
    var b = 2;
    var c = a > b ? a : b

    函数

     函数定义

    // 函数的定义
    function foo(a,b) {
        console.log(a);
        console.log(b);
        return a + b;  // 返回值
    }
    
    // 函数的调用
    var ret = foo(11,22);  // 定义一个变量接受返回值
    console.log(ret);
    
    // 匿名函数
    var bar = function (a,b) {
        console.log(a);
        console.log(b);
        return a+b;
    }
    
    bar(11,22);
    
    // 立即执行函数 先写两个括号
    (function (a,b) {
        console.log("立即执行函数");
        console.log(a+b);
    })(11,22);  // 传递实参

    函数中的arguments参数

    // arguments
    function func(a,b) {
        console.log(a);
        console.log(b);
        console.log(arguments.length);  // 取长度
        var ret = 0;
        for (var i=0;i<arguments.length;i++){
            ret += arguments[i]
        }
        return ret;
    }
    console.log(func(11,22));

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

    局部变量

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

    全局变量:

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

    变量生存周期:

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

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

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

    作用域

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

    // 示例1
    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    f();  //shenzhen
    
    // 示例2
    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret();  // beijing
    
    // 示例3
    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();  // shanhai

    词法分析

    JavaScript中在调用函数的那一瞬间,会先进行词法分析。

    词法分析的过程:

    当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(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();  // undefined 22
    
    // 示例2
    var age = 18;
    function foo(){
      console.log(age);
      var age = 22;
      console.log(age);
      function age(){
        console.log("呵呵");
      }
      console.log(age);
    }
    foo();  
    /*
    ƒ age(){
        console.log("呵呵");
      }
      22
      22
     */

    内置对象和方法

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

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

    注意var s1 = "abc"和var s2 = new String("abc")的区别:typeof s1 --> string而 typeof s2 --> Object

    自定义对象

     两种方法声明定义数组

    // js中自定义对象
    var person = {"name":"A","age":18};  
    console.log(person);
    // 单独取属性
    console.log("name:",person.name);
    console.log("age:",person.age);
    // 遍历对象的属性
    for (var i in person){
        console.log(i);
        console.log(person[i]);

     点后面只能跟属性,括号里面可以用变量。

    创建对象:

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

    Date对象

    创建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 ()            获取完整年份
    //getHours ()               获取小时
    //getMinutes ()             获取分钟
    //getSeconds ()             获取秒
    //getMilliseconds ()        获取毫秒
    //getTime ()                返回累计毫秒数(从1970/1/1午夜)

    JSON对象

    var str1 = '{"name": "A", "age": 18}';
    var obj1 = {"name": "A", "age": 18};
    // JSON字符串转换成对象
    var obj = JSON.parse(str1); 
    // 对象转换成JSON字符串
    var str = JSON.stringify(obj1);

    RegExp对象

    //RegExp对象
    
    //创建正则对象方式1
    // 参数1 正则表达式(不能有空格)
    // 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写)
    
    // 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
    
    // 创建RegExp对象方式(逗号后面不要加空格)
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
    
    // 匹配响应的字符串
    var s1 = "bc123";
    
    //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
    reg1.test(s1);  // true
    
    // 创建方式2
    // /填写正则表达式/匹配模式(逗号后面不要加空格)
    var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;
    
    reg2.test(s1);  // true
    
    
    // String对象与正则结合的4个方法
    var s2 = "hello world";
    
    s2.match(/o/g);         // ["o", "o"]             查找字符串中 符合正则 的内容
    s2.search(/h/g);        // 0                      查找字符串中符合正则表达式的内容位置
    s2.split(/o/g);         // ["hell", " w", "rld"]  按照正则表达式对字符串进行切割
    s2.replace(/o/g, "s");  // "hells wsrld"          对字符串按照正则进行替换
    
    // 关于匹配模式:g和i的简单示例
    var s1 = "name:A age:18";
    
    s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:A age:18"
    s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:A 哈哈哈ge:18"      全局匹配
    s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写
    
    
    // 注意事项1:
    // 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
    // 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
    // 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
    // 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
    // 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
    // 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。
    
    var reg3 = /foo/g;
    // 此时 regex.lastIndex=0
    reg3.test('foo'); // 返回true
    // 此时 regex.lastIndex=3
    reg3.test('xxxfoo'); // 还是返回true
    // 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号。
    
    // 注意事项2(说出来你可能不信系列):
    // 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test("undefined"), 并且/undefined/.test()默认返回true。
    var reg4 = /^undefined$/;
    reg4.test(); // 返回true
    reg4.test(undefined); // 返回true
    reg4.test("undefined"); // 返回true
    RegExp

    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)      返回角的正切。
    Math
  • 相关阅读:
    Flash builder发布Air程序时设备配置文件supportedProfiles的配置
    Apple Swift中文入门教程【转发】
    管理书籍
    Android Market google play store帐号注册方法流程 及发布应用注意事项
    BMFont使用图片自定义字体(无需字体文件)
    google广告尺寸
    AndroidMainfest.xml文件解释
    win10 vscode ssh-remote配置免密登录
    vscode java配置
    vscode Java 11 or more recent is required to run. Please download and install a recent JDK”
  • 原文地址:https://www.cnblogs.com/wangzihong/p/10108632.html
Copyright © 2020-2023  润新知