zoukankan      html  css  js  c++  java
  • 前端基础 & 初识JS(JavaScript)

    JavaScript概述

    JavaScript的历史

    • 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客户端执行的语言)。
    • Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言。Sun和Netscape共同完成,后改名叫JavaScript。
    • 微软随后模仿在其IE3.0的产品中搭载了一个JavaScript的克隆版叫Jscript。
    • 为了统一三家,ECMA(欧洲计算机制造协会)定义了ECMA-262规范.国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。
    • ECMA-262 是 JavaScript 标准的官方名称。

    ECMAScript

    年份 名称 描述
    1997 ECMAScript 1 第一个版本
    1998 ECMAScript 2 版本变更
    1999 ECMAScript 3

    添加正则表达式

    添加tru/catch

      ECMAScript 4 没有发布
    2009 ECMAScript 5

    添加"strict mode"严格模式

    添加JSON支持

    2011 ECMAScript 5.1 版本变更
    2015 ECMAScript 6 添加类和模块
    2016 ECMAScript 7

    增加指数运算符(**)

    增加Array.prototype.includes

    注:ES6就是指ECMAScript 6。

    尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

    • 核心(ECMAScript) 
    • 文档对象模型(DOM) Document object model (整合js,css,html)
    • 浏览器对象模型(BOM) Broswer object model(整合js和浏览器)
    • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的.

    简单地说,ECMAScript 描述了以下内容:

    • 语法 
    • 类型 
    • 语句 
    • 关键字 
    • 保留字 
    • 运算符 
    • 对象 (封装 继承 多态) 基于对象的语言.使用对象.

    JavaScript引入方式

    Script标签内写代码

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

    引入额外的JS文件

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

    JavaScript语言规范

    注释

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

    结束符

    JavaScript中的语句要以分号 “;” 为结束符。

    JavaScript语言基础

    变量声明

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

    注意:

    变量名是区分大小写的。

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

    JavaScript数据类型

    JavaScript拥有动态类型

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

    数字类型

    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

    字符串

    var a = "Hello"
    var b = "world;
    var c = a + b; 
    console.log(c);  // 得到Helloworld

    常用方法:

    方法描述
    charAt() 返回指定索引位置的字符
    charCodeAt() 返回指定索引位置字符的 Unicode 值
    concat() 连接两个或多个字符串,返回连接后的字符串
    fromCharCode() 将 Unicode 转换为字符串
    indexOf() 返回字符串中检索指定字符第一次出现的位置
    lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置
    localeCompare() 用本地特定的顺序来比较两个字符串
    match() 找到一个或多个正则表达式的匹配
    replace() 替换与正则表达式匹配的子串
    search() 检索与正则表达式相匹配的值
    slice() 提取字符串的片断,并在新的字符串中返回被提取的部分
    split() 把字符串分割为子字符串数组
    substr() 从起始索引号提取字符串中指定数目的字符
    substring() 提取字符串中两个指定的索引号之间的字符
    toLocaleLowerCase() 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
    toLocaleUpperCase() 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
    toLowerCase() 把字符串转换为小写
    toString() 返回字符串对象值
    toUpperCase() 把字符串转换为大写
    trim() 移除字符串首尾空白
    valueOf() 返回某个字符串对象的原始值

    更多方法实例可以参见:JavaScript String 对象

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

    布尔类型

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

    var a = true;
    var b = false;

    数组

    类似于Python中的列表。

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

     常用方法:

    方法描述
    concat() 连接两个或更多的数组,并返回结果。
    copyWithin() 从数组的指定位置拷贝元素到数组的另一个指定位置中。
    every() 检测数值元素的每个元素是否都符合条件。
    fill() 使用一个固定值来填充数组。
    filter() 检测数值元素,并返回符合条件所有元素的数组。
    find() 返回符合传入测试(函数)条件的数组元素。
    findIndex() 返回符合传入测试(函数)条件的数组元素索引。
    forEach() 数组每个元素都执行一次回调函数。
    includes() 判断一个数组是否包含一个指定的值。
    indexOf() 搜索数组中的元素,并返回它所在的位置。
    join() 把数组的所有元素放入一个字符串。
    lastIndexOf() 返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
    map() 通过指定函数处理数组的每个元素,并返回处理后的数组。
    pop() 删除数组的最后一个元素并返回删除的元素。
    push() 向数组的末尾添加一个或更多元素,并返回新的长度。
    reduce() 将数组元素计算为一个值(从左到右)。
    reduceRight() 将数组元素计算为一个值(从右到左)。
    reverse() 反转数组的元素顺序。
    shift() 删除并返回数组的第一个元素。
    slice() 选取数组的的一部分,并返回一个新数组。
    some() 检测数组元素中是否有元素符合指定条件。
    sort() 对数组的元素进行排序(按照unicode排序)。
    splice() 从数组中添加或删除元素。
    toString() 把数组转换为字符串,并返回结果。
    unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
    valueOf() 返回数组对象的原始值。


    var a = [10, 20, 30, 40];
    遍历数组中的元素:

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

    null和undefined

    • undefined表示的是当声明的变量未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
    • null表示值不存在(值为空)
    • undefined表示声明了变量,但是还没有赋值。null声明了变量并且变量是空值。

    类型查询

    判断数据类型:
    typeof "abc" // "string" typeof null // "object" typeof true // "boolean" typeof 123 // "number"

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

    运算符

    算数运算符

    + - * / % ++ --

    比较运算符

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

    注意:

    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("...")
    }

    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 // 条件是true,值是a;条件是false,值是b。

    函数

    函数定义

    JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。

    // 普通函数定义
    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);

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

    局部变量

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

    全局变量:

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

    变量生存周期:

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

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

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

    作用域

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

    几个例子:

    1.

    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();  //输出结果是?

    2.

    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret();  // 打印结果是?

    3.闭包

    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();

    内置对象和方法

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

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

    自定义对象

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

    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 Car = function (loc) {
      this.loc = loc;
    };
    
    // 父类方法
    Car.prototype.move = function () {
      this.loc ++;
    };
    
    // 子类构造函数
    var Van = function (loc) {
      Car.call(this, loc);
    };
    
    // 继承父类的方法
    Van.prototype = Object.create(Car.prototype);
    // 修复 constructor
    Van.prototype.constructor = Van;
    // 扩展方法
    Van.prototype.grab = function () {
      /* ... */
    };
    JavaScript面向对象之继承

    Date对象

    创建Date对象

    //方法1:不指定参数
    var d1 = new Date();
    console.log(d1.toLocaleString());
    //toLocaleString() 方法可根据本地时间把 Date 对象转换为字符串,并返回结果。 //方法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 星期三”格式输出。

    点击查看更多Date对象方法

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

    RegExp对象

      

    //RegExp对象
    
    //创建正则对象方式1
    var p1 = new RegExp("参数1","参数2")
    // 参数1 正则表达式
    // 参数2 验证模式:g(global)和i(忽略大小写)
    
    // 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
    
    // 创建RegExp对象方式
    var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
    
    // 匹配响应的字符串
    var s1 = "bc123";
    
    //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
    reg1.test(s1);  // true
    
    // 创建方式2
    // /填写正则表达式/匹配模式
    var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
    
    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:Alex age:18";
    
    s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
    s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
    s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不区分大小写

    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对象

    JS详细篇参见http://www.cnblogs.com/bigtreei/articles/8118431.html

  • 相关阅读:
    WebServce之Map类型传输
    WebService之跨域
    WebServce之拦截器
    Webservice之发布
    JAVA之ElasticSearch
    MonogoDb学习笔记
    DotNetCore自带Ioc使用程序集名称注入
    生产者与消费者
    哈希算法-Time33
    线程安全的集合操作类
  • 原文地址:https://www.cnblogs.com/bigtreei/p/8118767.html
Copyright © 2011-2022 走看看