zoukankan      html  css  js  c++  java
  • 前端学习之-- JavaScript

    JavaScript笔记

    参考:http://www.cnblogs.com/wupeiqi/articles/5602773.html

    javaScript是一门独立的语言,游览器都具有js解释器

    首先html head头部包含如下:
    <meta charset="UTF-8">
    <title>Title</title>
    <style>css代码</style>
    <script>js 代码</script>
    注意:每行js代码后要加:分号,因为当所有js代码压缩到一行的时候,是通过分号进行区分的,也会省空间和容量。但是请注意,一般js都是写在body标签的结尾处。

    介绍js的存在形式;
    1:head中
    <script>
    //javascript代码
    alert('123');
    </script>

    <script type='text/javascript'> 这里是做了一个声明,也可以不写
    //javascript代码
    </script>
    2:保存在文件中
    <script src='js文件路径'> </script>
    3:写到body内部的最下面,

    js代码注释:但行注释: // 多行注释:/* ....*/

    变量说明:
    name = 'jack' #全局变量
    var name = 'jack' # 局部变量
    <script>
    name = 'jack'; 全局变量
    function fun() {
    var name = jack 局部变量
    }
    </script>
    写js代码:
    - 直接写在html文件中
    - 临时测试:在游览器的终端(console)

    实例讲解:实现一个简单的弹窗

     1     <body>
     2     <input type="text" id="user">
     3     <input type="button" onclick="getdata();" value="提交">
     4     <script>
     5         function getdata() {
     6             var i = document.getElementById('user') # 从整个页面里查找id为user的标签
     7             alert(i.value);
     8         }
     9         age = '18'
    10         i = parseInt(age);
    11         j = parseFloat(age);
    12     </script>
    13     </body>
    View Code

    基本数据类型:
    1:数字
    age = '18'
    i = parseInt(age); # 将字符串转换为数字
    j = parseFloat(age); #转换为浮点数
    在页面右击-》审查元素-》console里可以手工输入测试
    2:字符串
    - obj.length 长度 重点
    - obj.trim() 移除空白
    - obj.trimleft() / trimRight()
    - obj.charAt(n) 返回字符串中的第n个字符 重点
    - obj.concat(value,...) 拼接
    - obj.indexOf(substring,start) 子序列位置(从左到右提取指定字符第一次出现的索引位置)
    - obj.lastIndexOf(substring,start) 子序列位置(从左到右提取指定字符最后出现的索引位置)
    - obj.substring(from,to) 根据索引获取子序列 重点
    - obj.slice(start,end) 切片
    - obj.tolowerCase() 大写
    - obj.toUpperCase() 小写
    - obj.split(delimiter,limit) 根据指定字符分割生成一个列表
    - obj.search(regexp) 从头开始匹配,返回匹配成功的第一个位置(g无效)
    - obj.match(regexp) 全局搜索,如果正则中有g表示找到全部,否则只找到第一个
    - obj.replace(regexp,replacement) 替换,正则中有g则替换所有,否则只替换第一个匹配值,
    $数字:匹配的第n个组内容
    $&:当前匹配的内容
    $`:位于匹配子串左侧的文本。

    举例:
    a = 'jack'
    "jack"
    a.charAt(1)
    "a"

    3:列表(数组):a = [11,22,33]
    - obj.length 数组的大小
    - obj.push(ele) 尾部追加元素
    - obj.pop() 尾部获取一个元素
    - obj.unshift(ele) 头部插入元素
    - obj.shift() 头部移除元素
    - obj.splice(start<起始的位置>,deleteCount<删除的个数>,value<插入的值>...) 插入,删除或替换数组的元素
    obj.splice(n,0,val) 指定位置插入元素
    obj.splice(n,1,val) 指定位置替换元素
    obj.splice(n,1) 指定位置删除元素
    - obj.slice() 切片
    - obj.reverse() 反转
    - obj.join(sep) 将数组元素连接起来以构建一个字符串
    - obj.concat(val,...) 连接数组
    - obj.sort() 对数组元素进行排序
    4:字典
    和python类似
    5:布尔类型
    使用小写:true,false

    条件语句:
    if (条件){
    }else if(条件){
    }else if(条件){
    }else{}

    if (1==1){} #值相等即可
    if (1!=1){} #值不相等
    if (1===1){} # 值和类型都要相等
    if (1!==1){} #值和类型不相等
    if (1==1 &&/|| 2==2) # &&->and ||->or
    条件语句第二种写法:
    name = 1
    switch(name){
    case;'1'; # 当name为1的时候,执行这里
    console.log(123)
    case:'2': # 当name为2的时候,执行这里
    console.log(456);
    default: # 默认执行
    console.log('999')

    for循环:(2种)
    1: 循环时,循环的元素是索引值
    写法一:
    a= [11,22,33,44]
    for (var item in a){
    console.log(item); # 打印的是索引值,使用a[item]才能打印值
    }

    a= {'k1':'v1','k2':'v2}
    for (var item in a){
    console.log(item); # 打印的是key,使用a[item]才能打印值
    }
    写法二:
    for (var i=0;i<10;i++){}
    a = [11,22,33,44]
    for (var i=0;i<a.length;i=i+1){
    console.log(a[i])
    }
    注意:这个循环方法不支持字典
    2:第二种循环,用法和python一样
    while (条件){
    循环体
    }

    循环也存在:break,continue

    举例continue / break 使用:
    for (var item in [11,22,33] {
    console.log(item)
    continue; 终止本次循环
    }
    for (var i=0;i<10;i++){
    cosole.log(i)
    break; 结束本循环
    }

    函数分类:3种:
    第一种:普通函数
      function 函数名(形参){
        函数体
      }
      函数名(实参)

    举例:
    function func(arg){
      return arg+1
      }
    var result = func(1)
    console.log(result)

    第二种:匿名函数
    setInterval(执行的函数,5000)
    setInterval(function(){
      console.log(123)
      },5000)

    第三种:自执行函数:程序由上到下执行到这里时候,会自动创建并执行函数。
    (function(arg形参){
      console.log(arg)
      })(实参)

    序列化
    JSON.stringify():将对象转换为字符串
    JSON.parse():将字符串转换为对象类型
    举例:将列表转换为字符串
      l1=[11,22,33,44] # 首先定义一个数组
      s = JSON.stringify(l1) # 将数组转换为字符串
      输出:"[11,22,33,44]"
      new = JSON.parse(s) # 将字符串转换为数组
      输出:(4) [11, 22, 33, 44]
      经常用在与后台进行通信

    转义:(对特殊字符和中文转义)
    decodeURI():URI中来转义的字符(解码,将uri中的中文转为可看懂的)
    decodeURIComponent():URI组件中的来转义的字符(解码)
    encodeURI():URI中的转义字符(编码,将uri中的中文转为%等字符串)
    encodeURIComponent():将uri中的中文,://这样的字符全部进行转义
    以上举例说明:
      url = 'https://www.sogou.com/web?query=zh中文' # 定义一个url
      new_url = encodeURI(url) # 第一种编码
      输出:https://www.sogou.com/web?query=zh%E4%B8%AD%E6%96%87 # 只中文进行了编码
      encodeURIComponent(url) #第二种编码
      输出:https%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3Dzh%E4%B8%AD%E6%96%87" # 将https后的://和中文都进行了编码
      解码相对上面的也是2种方法
      decodeURI(new_url) # 进行解码
      https://www.sogou.com/web?query=zh中文 # 输出解码后的url

    escape():对字符串转义
    unescape():给转义字符串解码
    URIError:由URI的编码和解码方法输出

    eval:相当于表达式和执行代码的集合

    时间:
    Date对象用来操作时间
    var d = new Date() # 表示创建一个对象,(d里面就封装了当前的时间)
    d.get... 获取 / d.set.... 设置
    获取当前时间使用: d.方法
    获取分钟:d.getMinutes()
    修改分钟:
    n = d.getMinutes() + 4 (获取新的时间)
    d.setMinutes(n) (设置为新的时间)

    作用域(最重要):函数未执行前首先要从上到下进行解释(过程是只对函数生成作用域)
    结论:
    1:js以函数为作用域

     举例:javascript:以函数为作用域

    1 function func(){
    2     if(1==1){
    3         name='jack';
    4     }
    5     console.log(name);
    6 }
    7 func()
    View Code

    2:函数的作用域在函数未被调用之前,已经创建

    举例:以下这个函数没有执行,但是已经创建

    1 function func(){
    2 if(1==1){
    3     name='alex';
    4 }
    5 console.log(name);
    6 }
    View Code

    3:函数的作用域存在作用域链(函数套函数),并且也是在被调用之前创建

     1 name = 'jack';  # 优先级最低
     2 function func(){
     3     var name = 'vivi';  # 优先级3
     4     function inner(){
     5         var name = 'bill'; # 优先级1
     6         console.log(name);
     7     }
     8     var name = 'toni';  #优先级2
     9     reuturn inner;
    10 }
    11 var ret = func()
    12 ret()
    13 以上作用域链执行顺序解释如下:进行全局解释 name=jack,生成func作用域,执行ret=func()这里,开始执行函数
    14 func,首先name=vivi,然后执行name=toni,最后返回inner函数给ret,这个时候name=toni,最后执行ret()函数
    15 相当于执行inner函数,执行name=bill,并且打印此变量,注意:当name=bill此变量不存在时候,则name=toni
    16 所以变量赋值顺序是:name=jack(优先级最低) , name=vivi , name=toni , name=bill(优先级最高)
    17 说明:作用域和python一样,优先级都是从内到外。
    View Code

    4:函数内部局部变量 声明要提前
    举例:

    1 function func(){
    2     console.log(xx) 解释过程中xx 为undefined
    3     var xx = 'jack' 执行到这里才声明变量
    4 }
    5 func() 执行函数 
    View Code

    支持面向对象:
    function foo(){
      this.name = 'jack' # this相当于python 中的self,这里相当于构造方法
      }
    var obj = new foo(); # 实例化用,new 函数() 表示创建了一个对象
    obj.name # 打印属性值
    1:这里this代指对象(python self)
    2:创建对象时:new 函数()
    举例:
    function Foo(n){
      this.name = n;
      this.sayname = function(){
      console.log(this.name)
      }
      }
    var obj1 = new Foo('we');
    obj1.name
    obj1.sayname()
    执行:这里obj1就是函数里的this,obj1.name输出为赋予的实参we,然后执行sayname函数,函数内部的this就是对应的obj1,
    所以obj1.sayname函数执行的输出this.name值为we
    原型:
    function Foo(n){
      this.name = n;
      }
    # Foo的原型
    Foo.prototype = {
      'sayName': function(){
      console.log(this.name)
      }
      }
    obj1 = new Foo('we');
    obj1.sayName() # 这里从Foo的原型里查找
    obj2 = new Foo('we');
    obj2.sayName() # 这里从Foo的原型里查找
    # 原型存在的好处是,避免重复方法调用浪费内存资源

    定时器:
    <script>
      function f1(){ # 定义 函数
        console.log(1) # 在console里打印
      }
      function fun() {
      alert('jack')
      }
    //创建一个定时器
    //setInterval('执行什么','间隔多少')
    setInterval('fun()',2000); //每2秒执行一次
    </script>
    举例:提取页面的内容
    <body>
      <div id="i1">欢迎老男孩来</div>
    </body>
    打开页面在console中显示内容:
    i = document.getElementById('i1') # 获取id为i1的标签
    i.innerText # 提取并显示标签里的内容
    content = i.innerText
    f = content.charAt(0)
    l = content.substring(1,content.length)
    new_content = l + f;
    i.innerText = new_content;

    举例:实现动态跑马灯

     1 <div id="i1">欢迎老男孩来</div>
     2 <script>
     3     function getdata() {
     4         //根据ID获取指定标签和内容,定义局部变量
     5         var label_content = document.getElementById('i1');
     6         // 获取标签内的内容
     7         var content = label_content.innerText;
     8         // 获取第0个字符
     9         var c1 = content.charAt(0);
    10         // 获取位置1之后的内容
    11         var c2 = content.substring(1,content.length);
    12         var c3 = c2 + c1;
    13         label_content.innerText = c3
    14     }
    15     setInterval('getdata()',1000)
    16 </script>
    View Code
  • 相关阅读:
    LA3523 二分图和点双连通分量的综合性质及证明
    LA4127计算几何+离散化+点覆盖
    LA 4728凸包算法-旋转卡壳的直径
    UVA 11168凸包+距离公式
    UVA 10652凸包+面的旋转
    UVA10969计算几何+交叉圆形成的圆弧长
    LA3485二分+求解积分方程+辛普森算法计算积分
    LA5009三分法
    UVA10341幂函数零点的通解分析
    UVA11524构造系数数组+高斯消元解异或方程组
  • 原文地址:https://www.cnblogs.com/zy6103/p/7326578.html
Copyright © 2011-2022 走看看