• JavaScript基础


    历史 简介

    一个完整的 JavaScript 实现是由以下 3 个不同部分组成

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

    所谓的基于对象就是直接使用,用new创建一个新的类

    ECMAScript 描述了以下内容:

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

    JS的引入方式

    {#1 直接编写#}
        <script>
            alert('hello yuan')
        </script>
    {#2 导入文件#}
        <script src="hello.js"></script>  
    
    
    

    JS基础

    强类型与弱类型的语言

    Python是强类型的语言,是数据类型的原因,同时是动态语言(与声明和编译解释有关)

    print(12+"hello") 会报错,是不同的数据类型,不能相加

    JavaScript是弱类型的语言

    这种是隐式转换,数字自动转换成字符串

    console.log(12+"hello")//在编译的时候执行的是隐式的
    

    无类型: 汇编
    弱类型、静态类型 : C/C++
    弱类型、动态类型检查: Perl/PHP
    强类型、静态类型检查 :Java/C#
    强类型、动态类型检查 :Python, Scheme
    静态显式类型 :Java/C
    静态隐式类型 :Ocaml, Haskell

    https://www.zhihu.com/question/19918532

    变量

    var x=5
    var y=6
    var z=x+y
    
    • 声明变量时不用声明变量类型. 全都使用var关键字;
      关键是分号结尾

    • 一行可以声明多个变量.并且可以是不同类型.

    var name="aa", age=20, job="bbb";
    
    • 声明变量时 可以不用var. 如果不用var 那么它是全局变量.
    • 变量命名,首字符只能是字母,下划线,$美元符 三选一,且区分大小写,x与X是两个变量
    • 变量还应遵守以下某条著名的命名规则:
    大驼峰 :首字母是大写的,接下来的字母都以大写字符开头
    var myTestValue = 0;
    小驼峰 :首字母是小写的,接下来的字母都以大写字符开头。
    var MyTestValue = 0;
    专业的:标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。
    var iMyTestValue = 0;  //i代表int s代表自付串
    

    规范

    分号结尾,可以不写,但是是以换行符进行区分

    注释 支持多行注释和单行注释. /* */ //

    使用{}来封装代码块

    常量和标识符

    **常量 **:直接在程序中出现的数据值
    标识符

    • 由不以数字开头的字母、数字、下划线(_)、美元符号($)组成
    • 常用于表示函数、变量等的名称
    • 例如:_abc,$abc,abc,abc123是标识符,而1abc不是
    • JavaScript语言中代表特定含义的词称为保留字,不允许程序再定义为标识符

    数据类型

    数字类型

    不区分整型数值和浮点型数值
    所有数字都采用64位浮点格式存储,相当于Java和C语言中的double格式
    能表示的最大值是±1.7976931348623157 x 10308
    能表示的最小值是±5 x 10 -324

    • 整数
      在JavaScript中10进制的整数由数字的序列组成
      精确表达的范围是
-9007199254740992 (-253) 到 9007199254740992 (253)
      超出范围的整数,精确度将受影响

    • 浮点数
      使用小数点记录数据
      例如:3.4,5.6
      使用指数记录数据
      例如:4.3e23 = 4.3 x 1023

    字符串

    都是Unicode数据,所以没有字符编码的问题
    是由Unicode字符、数字、标点符号组成的序列
    字符串常量首尾由单引号或双引号括起
    JavaScript中没有字符类型
    常用特殊字符在字符串中的表达
    字符串中部分特殊字符必须加上右划线
    常用的转义字符 :换行 ':单引号 ":双引号 :右划线

    布尔型Boolean()

    Boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0

    if (2>1){
        console.log(true+1)
    }
    

    结果是2

    Null & Undefined
    var n = 12;
    var s = "hello";
    var b = false;
    var x;//没有初始化
    
    console.log(typeof n);
    console.log(typeof s);
    console.log(typeof b);
    console.log(typeof x);
    

    结果:
    number
    string
    boolean
    undefined

    • undefiend类型

      Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined
      当函数无明确返回值时,返回的也是值 "undefined";

    • Null 类型

      另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

      尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

    强制类型转换
    • parseInt()
      NaN:当涉及数据准换成数字的时候不行
      console.log(parseInt("3.43abc"));//结果是3.43
      console.log(parseInt("a3.43a"))//此时的结果就是NaN 不是一个数字

    • parseFloat()
      强制转换成成数字 console.log(parseFloat("6.12"));//把字符串转转换成相应的浮点数

    • evel()
      将字符串强制转换为表达式并返回结果 eval("1+1")=2 ;

    类型查询函数

    typeof

    x=typeof("test"+3) ;    // "string"
    y=typeof(null)      ;     //  "object "
    z=typeof(true+1)     ;  // "number"
    d=typeof(true-false) ; // number
    
    console.log(x);
    console.log(y);
    console.log(z);
    console.log(d);
    

    运算符

    算数运算符

    加(+)、 减(-)、 乘(*) 、除(/) 、余数(% )

    递增(++) 、递减(--)

    先引用再赋值

    var  i =10;
    var ret;
    ret = i++;//先引用再赋值
    console.log(ret);
    console.log(i);
    

    结果:
    10
    11

    先计算 后引用

    var  i =10;
    var ret;
    ret = ++i;//先计算 后引用
    console.log(ret);
    console.log(i);
    

    结果:
    11
    11

    逻辑运算符

    等于 ( == ) 、不等于( != ) 、 大于( > ) 、 小于( < ) 
大于等于(>=) 、小于等于(<=) 与 (&&) 、或(||) 、非(!)

    console.log(1&&3);//3
    console.log(0&&3);//0
    console.log(1||3);//1
    console.log(0||3);//3
    

    与运算的时候是同时为真才为真,有一个为假就是假
    或运算的时候有一个为真就是真

    辑 AND 运算的运算数可以是任何类型的,不止是 Boolean 值。

    如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:

    • 如果某个运算数是 null,返回 null。
    • 如果某个运算数是 NaN,返回 NaN。
    • 如果某个运算数是 undefined,返回undefined。

    NaN
    not a number
    NaN 与参与的运算都是false,除了!=
    console.log(NaN!=NaN);//只有这个的结果是True

    等性运算

    • 如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
      console.log(true == 1);console.log(false == 0);

    • 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
      console.log("3"==3)

    • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。

    • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

    全等号和非全等号

    等号(==)和非等号(!==)的同类运算符是全等号(===)和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。

    var sRusults  ="3" ==3;  //true
    console.log(sRusults);
    var sRusults  ="3" ===3;  // 结果是false 不会进行转换
    console.log(sRusults);
    

    关系运算符(重要)

    var bResult = "aab" < "aac "; //从头开始比每一个的ASCII的值
    console.log(bResult)
    

    比较数字和字符串

    var bResult = "25" < 3;  //"25"会转换成数字25
    alert(bResult); //输出 "false"
    

    比较下面的情况

    var bResult = "25" < "3"; //比较的ASCII 
    alert(bResult); //输出 "true"
    

    上面这段代码比较的是字符串 "25" 和 "3"。两个运算数都是字符串,所以比较的是它们的字符代码("2" 的字符代码是 50,"3" 的字符代码是 51)。

    总结:

    • 比较运算符两侧如果一个是数字类型,一个是其他类型,会将其类型转换成数字类型.
    • 比较运算符两侧如果都是字符串类型,比较的是最高位的asc码,如果最高位相等,继续取第二位比较.

    流程控制

    基本的语言都是这样的

    • 顺序语句
    • if-else
    • 循环语句

    if-else

    if-else

    if (表达式){
    语句1;
    ......
    }else{
    语句2;
    .....
    }
    

    if else if else

    if (表达式1) {
        语句1;
    }else if (表达式2){
        语句2;
    }else if (表达式3){
        语句3;
    } else{
        语句4;
    }
    

    switch 选择控制语句 switch case

    switch (表达式) {
        case 值1:语句1;break;
        case 值2:语句2;break;
        case 值3:语句3;break;
        default:语句4;
    }
    
    var x = (new Date());//获取今天日期 周天是0
    console.log(x);
    
    switch(x){
        case 1:console.log("周一");break;
        case 2:console.log("周二");break;
        case 3:console.log("周二");break;
        case 4:console.log("周二");break;
        default:console.log("数据错误");
    }
    

    for循环

    for (初始化;条件;增量){
        语句1;
        ...
    }
    
    for(var i=0;i<10;i++){
        document.write("<h1>"+i+"</h1>")
    }
    

    求和

    var sum_num=0;
    
    for(var i=1;i<=100;i++){
        sum_num +=i;
    }
    
    alert(sum_num)
    

    while循环

    var i = 0;
    while( i<10){
        document.write("<h1>"+i+"</h1>");
        i++;
    }
    

    异常处理

    try {
        //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
    }
    catch (e) {
        // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
        //e是一个局部变量,用来指向Error对象或者其他抛出的对象
    }
    finally {
         //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
    }
    

    参考资料:

    http://www.cnblogs.com/yuanchenqi/articles/5980312.html

  • 相关阅读:
    android高级UI之Paint Xfermode
    android高级UI之Paint滤镜
    常见文献管理软件
    linux下10款markdown软件
    markdown页面内跳转
    Ubuntu18.04配制阿里巴巴的源
    python中TAB补全
    word中手动添加endnote的加载项
    MarkDown添加图片的三种方式
    word前页与后页页码断开
  • 原文地址:https://www.cnblogs.com/Python666/p/6895812.html
Copyright © 2020-2023  润新知