• JavaScript基础01(变量,数据类型及其转换,运算符)


    一、JS基础

    1.js的组成

    核心(ECMAScript)、DOM、BOM

    2.js的引入及写法

    1.在head里插入script标签,引入外部js代码

    这里的js无法调用body里的标签和代码(因为HTML是从上向下的同步解释性文档)

    2.在body标签最末尾引入script标签,直接在html内部书写js代码

    在html标签后引入script,浏览器会自动修正,将script标签引入回body标签里(一般不这么引用,当页面需要植入内容时使用,但是会增加浏览器消耗)

    几点注意:

    变量污染:载入的js文件里变量或函数相同时,会覆盖

    src地址里./代表当前文件夹,../代表上一级目录,引用外部js不要使用绝对路径,可以使用网址

    head标签里的script有async defer(后面学习)

    body里的js会污染head里引入的js,但是可以调用head里js的函数

    3.标签里的javascript

        <button onclick="console.log('aaaaa');" id='bn'>按钮</button>
        <!-- 标签中行内JavaScript执行 -->
        <button onclick="clickHandler()">按钮</button>
        <a href="javascript:console.log('aaaaa')">超链接</a>
        <!-- 不跳转 -->
        <a href="javascript:void(0)">超链接</a>   /*src没有这种用法*/
        <script>
            function clickHandler(){
                console.log("aaaaa");
            }
        </script>

    3.js注释和调试

    注释可以让不用的代码不执行

    注释可以用来解释代码的作用

    1. ctrl+/ 行注释,注释一行的代码

    2.shift+alt+a 块状注释

    块状注释可以用来注释一行中的部分内容

    块状注释可以用来注释掉一个函数和大量代码块

    块状注释对于函数的注释说明在函数部分讲解

    3.ctrl+shift+i控制面板里可以调试代码:

    elements可查看html和css并修改,有断点,事件侦听,属性继承链(Properties,可查看一个标签有哪些属性)

    console控制台

    sources代码源,帮助排错,可设置断点

    network是本地应用缓存

    performance相当于录屏,网页崩溃时(内存泄漏)看看有哪些操作导致了

    memory当前快照,当前页面系统内存占有

    二、常用方法属性和变量

    对象有两种模式,一种是属性,属性使用=赋值,一种是方法,方法需要()执行

    1.方法

    alert("你好");//将字符串以弹窗弹出,并且暂停到当前行

    alert(message?:any):void

    提示 message 参数名称 ?可以不写值 :any 这个参数的类型可以是任意的, :void 不返回任何值

    var a=confirm("是否继续?");//弹出确定取消框
    var s=prompt("你今年多大了?","20");//弹出输入框
    document.write("10","20","30");*//文档中写入字符
    document.write("<a href='#'>超链接</a>")

    2.属性

    document.body.innerHTML="你好";
    document.body.innerHTML="<div></div>";

    注意:document.write和innerHTML的区别

    write仅属于document的方法,可以给整个文档中增加内容

    innerHTML是所有body内(含body)标签的属性,可以给这些标签内局部增加内容和标签

    3.变量

    1.变量的赋值

    a=b=3;
    //连等,先赋值给=号最左边的元素,再逐级向右
    // =号左侧是变量名称,=号右侧是值
    // 不需要定义,随手写,不需要类型(弱类型)
    // =号赋值也是有返回值
    console.log(a=3);//结果为3
    a=b=3; 相当于 a=(b=3);  //代码遵从从左至右的执行方式
    b=1;    
    console.log(a=b++); //结果为1

    2.变量的命名规则

    1、变量必须驼峰式命名法

    2、临时变量必须使用_起头,后面接驼峰式命名,

    有时候也会在函数的参数中使用临时变量命名

    var _a=3;

    3、变量不可以使用关键词和保留字

    var if=3;
    var public=10;//保留字
    var static=20;

    4、全局的变量名不能与window下的属性和方法同名

    var alert=10;
    console.log(alert);
    alert("aaaa");
    var status=10;
    console.log(status);//返回字符型10,而非数字型
    console.log(var a=3);//一旦使用var是不可以返回的
    console.log(a=3); 没有使用var会被赋值的结果返回3

    3.常量

    const 常量是一旦定义值就不能改变值了 常量定义是名称必须全部大写,并且使用_区分单词 使用常量目的是不会被别人修改或者变量污染改变

    const EVENT_ID="changes";

    三、数据类型

    1.字符型string

    所有使用 '' "" ``都是字符型 string

    var a="a";
    var b='1';
    var c=`true`;
    var d='你好这个非常"不错"';
    console.log(a,b,c,d);
    console.log(typeof a);
    console.log(typeof(a));

    2.数值型number

    var a=3;
    var b=3.1;
    var c=-5;
    var d=-5.6;
    var e=0xFF;//16进制
    var f=065;//8进制
    var g=3.1e+5;//科学计数法 3.1*10(5)5次幂
    var h=3.5e-5;//科学计数法 3.5*10(-5) -5次幂
    console.log(typeof g,g);
    定义的不一定和打印的结果完全相同,全部都会转换为10进制

    3.布尔型boolean

    <style>
      div{
          100px;
         height: 100px;
      }
    </style>
    <div id="div0"></div>
    <script>
    var div0=document.getElementById("div0");
    var bool=true;//这就是布尔值;
    div0.onclick=function(){
        bool=!bool;//将bool取反,因为这个bool值的值域只有true和false
        div0.style.backgroundColor=bool ? "red" : blue";
    } 
    </script>

    4.未定义undefined

    var a;//仅定义变量未设置值
    var b=undefined; //定义变量并且设置值为undefined;
       值是相同的但是形态不同
       
    console.log(a===b);//true
    ​
    var arr=[1,2,,undefined,3];
    ​
    var a; // 用于全局定义,然后根据需要时赋值,初始是没有值的
    ​
    var b=undefined  //用于初始值必须是undefined,或者将原有有值的变量修改为undefined
    var x=10;
    x=undefined;

    5.空值null

    var a=null;
    console.log(typeof a); //object对象类型
    console.log(a===undefined);//false
    //空值是将所有引用地址标记清空,用于清理内存 垃圾回收
    var obj={a:1};
    obj=null;
    //字符类型,数值类型,布尔类型,未定义型都不需要null清除

    6.对象类型object

    var obj={};//空对象
    obj=null;//将obj引用地址清空
    var d="names";
    obj={
       // key:value关键词和值,对象不能出现重复的key,key不需要加""
        a:1,
        b:"ab",
        "c":true, //变量作为key必须在外层增加[]
        [d]:"xietian"
     }
     console.log(obj.a);//1
     console.log(obj.b);//ab
     console.log(obj.names);//xietian
     console.log(obj[d]);//xietian
     console.log(obj["a"]);//1
     // 获取对象中key的值时有两种方法
     // 一种是点语法,点语法使用范畴仅限于key属性固定,并且明确
     // 另一种是[]语法,如果是固定的key,就使用字符串方式来设定,
     // 如果不固定,直接[变量]就可以
    

      

    四、数据类型转换

    1.数值转字符串

    String(a)、a.toString(16)、a.toFixed(2)、a.toExponential()、a.toPrecision()

    var a=15.452;
    var b=String(a);//类型强制转换
    a=String(a);将a转换为字符串覆盖原有变量a
    a=a+"";//利用隐式转换方式,没有强制转换,根据运算特征自动转换为字符串,隐式转换
            // 隐式转换所使用的的转换方法是自动执行String(a);
            // toString()实际上是Object对象的方法,因此,万物皆对象,任何类型都可以调用这个方法
    a=a.toString(16);//参数必须是2-36之间,否则报错,转换为指定的进制数
    console.log(a);
    var color=0x0000FFFF;
    var div0=document.getElementById('div0');
    div0.style.color="#"+(color<<8).toString(16);
    //toFixed(小数点位数)  转换为字符串,并且保留小数点位数,自动四舍五入
    a=a.toFixed(2);
    console.log(a);
    a.toExponential();
    a.toPrecision();

    2.数值转换为布尔值

    Boolean(a)

    除了0以外所有的数值转换为布尔值都是true
    0转换为布尔值是false
    var  a=0;
    a=Boolean(a);
    console.log(a);

    3.数值转换为对象

    Object(a)

    var a=0;
    a=Object(a);//数值型对象,存储在堆中
    console.log(typeof a);

    4.字符串转换为数值

    Number(a)、parseInt(a,16)、parseFloat(a)

    var a="a";
    var a="3.2"
    a=Number(a);//强制转换为数值类型
    ​
    a=parseInt(a);//转换为整数
    a=parseFloat(a);//转换为浮点数
            
    var a="101";
    a=parseInt(a,2);//将字符串转换为2进制
    var color="FF0000";
    color=parseInt(color,16);
    console.log(color);
            
    a=parseFloat();//不能转换进制
    ​
    var b="32 1";
    var b="32 "
    b=Number(b);
    b=parseInt(b);
    b=parseFloat(b);
    console.log(b);
    //NaN  数值类型中的非数值
    // 隐式转换遵从Number()转换方法

    5.字符串转换为布尔值

    Boolean(a)

    // 仅空字符串转换为布尔值时,是false,除此之外全部是true
    var str="";
    str=Boolean(str);
    console.log(str);

    6.字符串转换为对象

    Object(a)

    var str="aaa";
    str=Object(str);
    //转换为字符串对象
    console.log(str);
    ​
    var str=" a a  ";
    str=str.trim();//清除字符串前后空格
    console.log(str);

    7.布尔转换为数值

    Number(a)

    //true转换为1,false转换为0
    var b=true;
    b=Number(b);
    console.log(b);

    8.布尔转换为字符

    转换后就是字符串true和false

    9.布尔转换为对象

    转换后就是布尔值对象

    10.任何类型转换为布尔值

    var a="";
    var b=0;
    var c=NaN;
    var d=false;
    var e=null;
    var f=undefined;
    //以上6种转换布尔值是false,其他都是true
    ​
    var a="32a";
    if(Number(a)){
    ​
    }
    ​
    //undefined null转换为字符串和数值
    var a;
    var b=null;
    a=String(a);
    b=String(b);
    console.log(b);
    ​
    a=Number(a);//转换为数值是NaN
    b=Number(b);//转换为数值是0
            
    a=parseInt(a);//NaN
    b=parseInt(b);//NaN
    console.log(a,b);
    ​
    var a,b,c;
    var a1=3,
        b1=4,
        c1="a",
        d1=true;
    ​
    var a=b=3;//尽量不要使用连等赋值

    五、算术运算符

    + - * / %(取模运算符)

    var a=3;
    var b=5;
    var s=a+b;
    var s=a-b;
    var s=a*b;
    var s=a/b;
    var s=b%a;
    // 运算浮点数运算是会有误差
    console.log(0.1+0.2); //0.300000004 用slice不能用toFixed
    
    var bn0=document.getElementById("bn0");
    var sum=1;
    bn0.onclick=function(){
        sum=sum+1;//先计算=号右边,完成后的结果赋值给等候左边
        if(sum%2){
             bn0.innerHTML="开";
        }else{
             bn0.innerHTML="关";
        }
     }
    ​
    // 如果在算术运算符中前后出现字符串,并且使用+
    // 必须使用字符串首尾相连的方式将内容连接
    String()  Number() Boolean() Object();
    var a=3;//因为a不是字符串,所以就会隐式转换为字符串
    var a="bbb";
    var a=true;
    var a;
    var a=null;
    var b="a";
    console.log(a+b);
    ​
    // 如果运算过程中没有使用字符串,使用+符号,
    // 其他类型都会转换为数值,并且相加
    var a=3;
    var b=true;
    var b;
    var b=null;
            
    var a;
    var b=null;
    var a=true;
    var b=null;
    console.log(a+b);//1
    ​
    // 所有类型遇到 - * / %都会隐式转换为数值,然后运算的
    var a="5";
    var b=2;
    console.log(a*b);//10

    六、一元运算符和赋值运算符

    var a=3;
    var b=4;
    var s=0;
    console.log(s=a+b);//7
    ​
    var a=3;
    a+=7;//a=a+7;   7就是步长 step
    console.log(a+=7);//17
    ​
    var a=3;
    a+="";
    console.log(a);//字符串类型的3
    //利用隐式转换完成字符串转换
    ​
    var a=3;
    a-=2;
    console.log(a);//1
    ​
    var a=3;
    a*=2;//6
    a/=2;//3
    a%=2;//1
    a+=a+1;//3
    // 赋值运算符的优先级最低
    var b=a+3+(a+=4)
    console.log(b);//13
    ​
    var a=3;
    a<<=2;
    console.log(a);//12
    ​
    var a=1;
    for(var i=0;i<5;i++){
        a<<=1;
        console.log(a);//2 4 8 16 32
    }
    ​
    var a=5;
    a>>=1;
    console.log(a);//2
    ​
    // 一元运算符
    var a=3;
    a++;//3下一次运算才为4
    a=a+1;//4
    a+=1;//4
    ​
    var a=3;
    var b= (a=a+1) *3;//12
    var b=(a++)*3;//先把a返回 9
    var b=(++a)*3;//把a运算的结果返回  12
    ​
    var s=1;
    var d=s=s+1;
    console.log(d);//2
    ​
    a++;++a;  对于a来说,这两个公式运算结果都是相同
    var a=1;
    a++;
    ++a;
    console.log(a);//2;
    ​
    // 如果将a++或者++a作为返回值参与运算或者赋值时
    // ++a 是+1以后的结果先参与运算或者赋值
    // a++ 是将a先参与运算或者赋值
    ​
    var a="3";
    var b=a++;
    // 对于++ 和 -- 通常都会直接使用算术运算来处理,
    // 也就是说我们会将内容先隐式转换为数值,然后再运算
    console.log(b);//数值型3
    ​
    var a=3;
    var b=a++ + a++ +a + a++ + a + a;//29
    //3+8+16
    var b=a+++(a+=a)+a++*2;
    console.log(b,a);//27,9

    七、关系运算符

    // 关系运算是返回布尔值的一种运算表达式
    var a=3;
    var b=4;
    var c=10;
    console.log(a<b);
    console.log(c+(a<b));//11
    c+=a<b;
    console.log(c);//11
    var c=a>b ? 0 : 1; //1
    var c=Number(a>b);  //0
    ​
    // 运算符   <   >  <=  >=
    // == 判断值是否相等   === 判断值和类型是否相等
    //以后所有代码必须使用===
    ​
    var a=3;
    var b="3";
    console.log(a==b);//自动隐式转换
    ​
    // 优先隐式转换为数值,并且比较
    console.log(""==false);//true
    console.log(0=="");//true
    console.log(0==false);/true
    ​
    console.log(undefined==null);//因为两者都不是数据true
    ​
    console.log(NaN==NaN);//false
    ​
    var a="3a"; //isNaN 将这个字符串转换为数值后判断是否是NaN非数值
    if(isNaN(a)){
       console.log(123);//123
    }
    ​
    var a=0;
    if(a==false){
        console.log("aa");
        // a->  0  false  ""
    }
    ​
    if(a===false){
         console.log("aa");
         // a-->false
    }
    if(!a){
         console.log("aa");
         // a-->0 null undefined false "" NaN
    }
    ​
    if(a==null){
        // a-->undefined  null
    }
    if(a===undefined){
        //a-->undefined
    }
    // !=   !==

    八、逻辑运算符

    // &&   ||   !
    ​
    var a=3;
    var b=4;
    console.log(a>0 && b<5);//true
    ​
    // true && true = (第二个值)
    // true && false = (第二个值)
    // false && true = (第一个值)
    // false && false = (第一个值)
    ​
    console.log(3 && 0);//0
    console.log(3 && 4);//4
    console.log(0 && 4);//0
    console.log(0 && "");//0
    ​
    var a=1;
    a=a-- && a++;
    console.log(a);//0
    ​​
    //  true || true = (第一个值)
    // true || false = (第一个值)
    // false || true = (第二个值)
    // false || false = (第二个值)
    ​
    var obj={a:2};
    // 如果obj转换为布尔值是true,直接熔断
    // 如果是false,取第二个值
    obj=obj || {a:1};
    console.log(obj);
    ​
    class Box{
           static _instance;
           static getInstance(){
              return Box._instance || (Box._instance=new Box());
           }
    }
    ​
    var  a=3;
    var b=a===3 || 0;
    console.log(b); //true
    ​
    // !  取反
    var bool=false;
    var bn=document.getElementById("bn");
    bn.onclick=function(){
       bool=!bool;//取反运算
       bn.innerHTML=bool ? "开" : "关";
    }
    ​
    var a;
    if(!a){
      console.log(123);//123
    }

     

  • 相关阅读:
    4组Alpha冲刺2/6
    4组Alpha冲刺1/6
    4组Alpha冲刺3/6
    4组Alpha冲刺3/6
    4组Alpha冲刺4/6
    原创视频作品汇总(更新至2012.8.04)
    PPT全转通2.0发布
    PPT全转通1.3
    [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
    原创钢琴曲 《夏季来临之前的歌》
  • 原文地址:https://www.cnblogs.com/ananasfleisch/p/13263725.html
Copyright © 2020-2023  润新知