zoukankan      html  css  js  c++  java
  • 前端-js基础语法

    前言、js的基本规范

      布兰登 • 艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。

      ECMAScript是一种由Ecma国际制定的标准【指定javascript的规范】。

      ECMAScript在2015年6月,发布了ECMAScript 6版本,语言的能力更强(也包含了很多新特性)。但是,浏览器的厂商不能那么快去追上这个标准。

      javascript 是前台语言【无法操作数据库】。(后台如php,asp,jsp)

      2011年,Node.js诞生,使JavaScript能够开发服务器程序了。


    Web前端有三层:

      HTML:从语义的角度,描述页面结构

      CSS:从审美的角度,描述样式(美化页面)

      JavaScript:从交互的角度,描述行为(提升用户体验)

     JavaScript特点:

      简单易用:可以使用任何文本编辑工具编写,只需要浏览器就可以执行程序。
      解释性语言:事先不编译、逐行执行、无需进行严格的变量声明。
      基于对象:内置大量现成对象,编写少量程序可以完成目标
      易学性:弱变量类型语言,无需指定变量类型,只需通过var来声明变量即可,解释器即浏览器会自己判断数据类型;有界面效果

    JavaScript基础分为三个部分:

      ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。

      DOM:操作网页上的元素的API。比如让盒子移动、变色、轮播图等。

      BOM:操作浏览器部分功能的API。比如让浏览器自动滚动,前进,后退等。

    PS:JS机械重复性的劳动几乎为0,基本都是创造性的劳动。而不像HTML、CSS中margin、padding都是机械重复劳动。

    一、js 的基本使用

    1、所有的js代码放在标签script中,script可以放在任意html的任意地方,head,body等等。
    <script type="text/javascript">
    代码体……
    </script>


    2、js对换行,缩进,空格不敏感,每行代码后加分号,以便程序压缩成一行

    3、注释
    // msg
    /*
    多行注释
    */

    4、在网页中输出信息
    alert("msg") :弹出警告框
    console.log(“msg”):在控制台输出,用于代码调试,浏览器就是js的解释器,控制台,
    chrom浏览器f12可查看console,在> 后可通过 window.变量名 打出变量结果

    prompt():用于弹出能够让用户输入的对话框,输入的都是字符串。
    var name = prompt("请输入学习日志?")

    二、基础语法

    1、定义变量
    变量命名:同python,唯一区别可以用$符号当变量(字母,数字,下划线,不能以数字开头,不能有特殊符号,不能是js的关键字/保留字);对大小写敏感;

    语法:
    var a = 1;

    1.1、直接量【也叫常量或字面量】
    数字:直接写,不需引号
    字符串:需引号,单双都可以


    1.2、变量类型
    变量里面能够存储数字、字符串等。变量会自动的根据存储内容的类型不同,来决定自己的类型。

    1.3、查看变量类型:typeof 变量 或 typeof(变量)

    1.4、变量从上到下,从新赋值,以最后一个为准
      var a = 1;
      var a = 2;
      console.log(a); ===> 2

    1.5、变量赋值
    将等号右边的值,赋给左边,故右边的变量必须先定义好且有值,不然报错。

      特例:字符串 - 数值 = 数值
        var a = '3';
        var b = 2;
    console.log(a - b); // 浏览器会将a变成数值参与运算,a变量必须是数字的的字符串

        var a = '3A';
        var b = 2;
    console.log(typeof(a - b), a-b);
      结果为:number NaN

    1.6、变量提升

      console.log(a)  结果不报错,只是提示Undefined,因为js中,通过var声明的变量,所有的变量都会自动将其在dom最前面声明,(定义的内容,必须在后面才能引用)。

      var a = 1;

    三、数据类型:

    数值型:number
    js中只要是数,就都是number,无论整浮、浮点数(即小数)、无论大小、无论正负。
    字符串:string
    引号引起来的都是字符串,“” 没有内容是空字符串类型

    字符串的拼接:
    + : 加号两边都是数字类型,才进行数学运算,否则就都做字符串拼接。
    var a = 'boy';
    var c = 111;
    console.log(a+c); //boy111

    做数学运算时:
    - % * 只要符号两边任意一边有一个数字,就会将另一个转换成数字,如果另一个元素是全数字的字符串就得出准确结果,如果不是就得到NaN
    + 号 只要一方有一个字符串,就是做拼接,而不是做运算,只有都是数字类型才是+法运算


    布尔型:boolean
    空:null
    未定义:undefined
    var d;
    typeof(d) ==>结果为:undefined

    Function
    Object
    Arrray
    String
    Date

    数据类型转换

    数值类型转为字符串:
    1、隐式转换:通过 【数值 + 字符串 】的拼接形式 var c = 123 + '123'; 123123
    2、强制转换: String(333) , num.toString() num必须是变量,纯数字不行


    字符串转为数值类型:
    parseInt()
    1、将字符串强转成数值,无论字符串是不是有数字组成(python不行)
    2、自动净化,保留字符串开头的数字,后面的中文消失,如果开头不是数字,那么只会转成数值,而显示NaN(表示不识别的数字,但其还是Number类型)
    console.log(parseInt('chian2018')); ===> 2018
    3、数字只取整,不关心小数,只取整数,不进行四舍五入
    console.log(parseInt(4.5)); ===> 4
    console.log(parseInt(4.5 + 5.7)); ===> 10 还是遵守先算括号里的
    以下的变量也表示数值number:
    var a = 2018/0 ; console.log(a);===>Infinity 无穷大
    或 var Infinity
    parseFloat()
    同parseInt,将字符串转为小数,一样如果字符串开头有数字,就就保留数字
    (如果数字仅仅为整数,转后还是整数不会加小数.0,如果原字符串含有小数,就保留整数和小数)

    任何数据类型都可以转为布尔类型:
    Boolean()
    NaN
    null
    undefined 转布尔为假

    非0及空即为真

    四、运算符

    赋值运算:= += -= *= /=(求商) %=(求余/取模)

    算术运算:+ - * / % ++ --
    a++ 就是每次+1 ,先返回a,再执行+1操作,下次a的值为原来的值加1
    ++a 同样每次+1,先计算,再返回a
    var a1 = 3;
    var x = ++a1;
    var y = a1++;
    console.log(x,a1); ==>4 5
    console.log(y,a1); ==>4 5
    *** 不管a++还是++a, a都要自身加以, 但是如果是a++,则返回值为旧值,如果是++a, 则返回值为新值.

    比较运算:== != > >= < <= ===(值和类型均相同) !==(值或类型至少有一个不一样)
    var xx_ = 5;
    console.log(xx_=='5') //true 左边是数字右边是字符串,js中让其先等,和py不一样
    console.log(xx_==='5') //flase

    五、流程控制

    if ; if ...else....;
    1、
    if(true){
    执行条件为真的语句
    }

    2、
    if(true){
    执行条件为真的语句
    }else{
    执行条件为假的语句
    }

    3、
    if(true){
    ....
    }else if(true){
    ....
    }else if(true){
    .....
    }else{
    .......
    }


    逻辑与 &&
    逻辑或 ||


    switch: 获取条件值,与下面的case分支条件值进行比对,然后执行匹配case后的语句
    case表示一个条件 满足这个条件就会走进来 遇到break跳出。break终止循环。如果某个条件中不写 break,那么直到该程序遇到下一个break停止
    所以条件后面都需要放一个break

    var msg_content = 'python';
    switch(msg_content){
    case 'china':
    alert('条件符合,我就执行了');
    break;
    case 'beijing':
    alert('执行条件');
    break;
    case 'python':
    alert('一起学js')
    break
    default:
    alert('没有匹配时,执行这段代码')
    }


    while 循环
    循环三步骤:
    1、初始化变量
    2、判断循环条件
    3、更新循环条件

    var i = 1;
    while(i <=9){
    console.log(i);
    i += 1;
    }

    do while 循环
    do/while 循环是 while 循环的变体。该循环会执行一次代码块,在检查条件是否为真之前,然后如果条件为真的话,就会重复这个循环。

    do{
    var i = 1;
    var text = "";

    text += "<br>数字为" +i

    docment.write(text)  在页面中显示
    i ++;
    var text ="";

    }while(i<10){
    docment.write(8888)
    }

    for循环
    for(var a = 1;a<100;a++){
    console.log(a)
    }

    前端for循环的详细讲解:https://blog.csdn.net/carrie_zzz/article/details/81145581

    六、内置对象【类似python中的数据类型】

    1、数组array【python中的list】

      创建1:var lis = ['red','green','blue'];

      创建2:var lis = new Array(11,22,33)

    2、特点
      有序,索引,切片

    3.数组的常用方法

    注:合并、拼接、排序、反转,返回值都为列表;删除都返回被删的元素;添加都返回长度;

    得到长度:lis.length  没有括号

    清空数组的几种方式:

       var array = [1,2,3,4,5,6];
    
        array.splice(0);      //方式1:删除数组中所有项目
        array.length = 0;     //方式1:length属性可以赋值,在其它语言中length是只读
        array = [];           //方式3:推荐

    4.字符串String

    5.Date日期对象

    创建日期对象只有构造函数一种方式,使用new关键字

    //创建了一个date对象
    var myDate = new Date();

    6.Math 内置对象

     7、函数

    函数:就是将一些语句进行封装,然后通过调用的形式,执行这些语句。

    函数的作用:

    • 将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动。

    • 简化编程,让编程模块化。

    8、伪数组 arguments

    七、js 三元表达式

     发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代,仅仅是未了让代码更简洁精辟,当然也有人说用三元可以让你有高潮的感觉。最近在写js 的时候也有这样的感觉,并且收集了一些小技巧,分享分享。

    大鸟请跳过下面这段,大大鸟帮忙指正 ^__^

    ====普及线====

    表达式 (expr1) ? (expr2) : (expr3)

    在 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

    ============

    普通用法

    当你发现你经常用if else

     代码如下:
    if(拜春哥 || 拜考试帝){
    不挂科;
    }else{
    门门挂;
    }

    那么三元的表示法就是

     代码如下:
    拜春哥 || 拜考试帝 ? 不挂科 : 门门挂

    很帅气的发现代码 精辟了 好多。

    日常中经常会有这样的 if else 判断,特别是嵌套比较多的时候 用三元是比较和谐的,可以让你的代码看起来更加清爽,结构清晰。

    稍微聪明点的用法
    通过不断的变化,可以衍生出很多三元的用法。如下一段jquery代码

     代码如下:
    flag ? $('body').addClass('hover') : $('body').removeClass('hover') ;

    甚至更变态些的。

     代码如下:
    $('.item')[ flag ? 'addClass' : 'removeClass']('hover')

    上面的代码看着比较困惑。因为当flag = true 的时候 ,代码就变成以下代码:

     代码如下:
    $('.item')['addClass']('hover')

    这样写法等同于。

     代码如下:

    $('.item').addClass('hover')

    再升华一下

    可以根据需要来调用自己想要的function来处理更多的事情。

     代码如下:

    function a(){
    do something
    }
    function b(){
    do something
    }

    flag ? a() : b();

    那么为师的完全体

    于是有了这么个案例,两个按钮 一个向前的行为,一个向后的行为。操作的功能都差不多。

     代码如下:

    var action_turn = function(e, type){
    var self = $(e).closest('li');
    var target = self[type === 'prev' ? 'prev' : 'next']();
    target.addClass('has-img');
    self.removeClass('has-img')
    }

    var btn_next = $('#item-photo-panel a.next')
    btn_next.click(function(){
    action_turn(this, 'next');
    return false;
    });
    var btn_prev = $('#item-photo-panel a.prev')
    btn_prev.click(function(){
    action_turn(this, 'prev');
    return false;
    });

    尽量避免的情况

     代码如下:
    alert( true ? 'true' : false ? 't' : 'f' )

    我指的是尽量避免如上嵌套的 三元,因为在js 中 语句是从右到左,上面的代码等同于

    代码如下:
    alert( true ? 'true' : ( false ? 't' : 'f' ) )

    如php 中这个结果就完全不一样,三元嵌套的时候是优先左边的。

     代码如下:
    echo (( true ? 'true' : false ) ? 't' : 'f' ) //php中

    tip:
    另外发现php中的三元有这样的提示

    Note: 注意三元运算符是个语句,因此其求值不是变量,而是语句的结果。如果想通过引用返回一个变量这点就很重要。在一个通过引用返回的函数中语句 return $var == 42 ? $a : $b; 将不起作用,以后的 PHP 版本会为此发出一条警告。

    但是经过试验,发现在javascript 中上面的做法是可以起作用的,大概是js 比较BT,严谨度没有php那么大的原因。

    今天谈一个小知识点,三元运算符。三元运算,顾名思义会有三个要素,表达式的大致组成为condition ? expr1 : expr2;一个语句加两个表达式。问号之前为判断语句。如果为真,则执行第一个表达式,如果为假,则执行第二个表达式。我的理解其实就是简化的if else语句,举个栗子,经常看到的一个点击展开,再点击隐藏按钮。

    我想实现点击输入法,实现下面ul的展开与隐藏,如果我们用if else的话可能会这么写:

    复制代码
    复制代码
       oBth.onclick=function(){
            if (oUl.style.display=='block') {
                oUl.style.display=='none';
            }else{
                oUl.style.display=='block';
            }
        }
    复制代码
    复制代码

    但是如果我们用三元运算符的话可能就只需要下面这一行代码:

    oBth.onclick=function(){
        oUl.style.display == "block" ? oUl.style.display="none" : oUl.style.display="block"
    }

    有木有很神奇。当然我只是用了一个比较容易理解的写法,还有很大的优化空间,我们当然也可以这样:

    复制代码
    复制代码
    oBth.onclick=function(){
        var style = oUl.style.display;
        oUl.style.display= style == "block" ? "none":"block"  //这样写的话就一定不能忘了把运算结果重新赋值给元素 - -
      //oUl.style.display= (style == "block" ? "none":"block") 可读性更高
    }
    复制代码
    复制代码

    上面代码的意思是,如果style == "block" 成立的话就把none返回,不成立就返回block,然后把返回结果赋值给作用元素,不过要特别注意 = 和 == 用法和区别。因为赋值运算符(=)的优先级比较低,所以会最后执行赋值运算。如果把后面的三元运算符加上()可读性会更高一点,但效果是一样的。

    比较容易出错的地方:

     三元运算比较容易出错的应该就是运算的优先级问题:

    var isMember = false;
        console.log("当前费用" + isMember ? "$2.00" : "$10.00"); //返回$2.00

    出错的原因是?的运算优先级比+低,所以实际运行的语句是:

    "当前费用false" ? "$2.00" : "$10.00");

    在js中字符串是为真的,所以会输出$2.00.

    不过为了避免以上错误的话,可以记住:

    不是false, 0, undefined, NaN, "" or null,js都认为是true;

    所以具体是用三元运算符还是用if else见仁见智,视具体情况而定吧。

    回到顶部

  • 相关阅读:
    NLP入门之语音模型原理
    NLP入门之语音模型原理
    NLP入门之语音模型原理
    TCP/IP 协议
    TCP/IP 协议
    TCP/IP 协议
    TCP/IP 协议
    Android -- 官方下拉刷新SwipeRefreshLayout
    Android -- 官方下拉刷新SwipeRefreshLayout
    创业屡战屡败,如何找回激情?
  • 原文地址:https://www.cnblogs.com/sunxiuwen/p/9481760.html
Copyright © 2011-2022 走看看