美文网首页
javascript兼容方法或者原生方法总结

javascript兼容方法或者原生方法总结

作者: 洛音轩 | 来源:发表于2019-12-03 19:40 被阅读0次

    1.封装ajax方法

    'use strict'
    // console.log('a');
    /*********************封装函数************************/
    // Document.prototype.getByClassName = function(className){
    //  var allDomArr = Array.prototype.slice.call(document.getElementsByTagName('*'),0);
    //  // console.log(allDomArr);
    //  var filterArr = [];
    //  function dealClassName(dom){
    //      var reg = /\s+/g;
    //      var itemArr = dom.className.replace(reg, ' ').trim().split(' ');
    //      return itemArr;
    //  }
    //  allDomArr.forEach(function (ele, index) {
    //      var itemArr = dealClassName(ele);
    //      for(var i = 0; i < itemArr.length; i++) { 
    //          if(className == itemArr[i]){
    //              filterArr.push(ele);
    //              break;
    //          }
    //      }
    //  })
    //  return filterArr;
    // }
    // console.log(document.getByClassName('demo'));
    
    /********************ajax****************/
    // form:
        // method: get, post
        // action: 服务器地址
        // enctype: application/x-www-form-urlencoded(默认值)(表示文件发送前编码成字符格式)multipart/form-data(把文件变成文件上传表单)
    // ajax技术能局部获取数据,还不刷新页面、且异步获取数据
    
    // new XMLHttpRequest()可以创建ajax对象但IE不认识
    // newa ActiveXObject('Microsoft.XMLHTTP')主流浏览器创建ajax文档
    /*****************兼容性写法**************************/
    // 流程:
    //  1.手机/电脑                             
    //  2.app
    //  3.商家 商品 地址
    //  4.提交订单 交钱
    //  5.监控 物流信息
    //  6.拿到餐 处理掉
    
    //  1.浏览器
    //  2.Ajax对象
    //  3.open('GEt', 'URL','true');
    //  4.send('data');
    //  5.onreadystatechange readyState==4//readyState有四个值(0::未初始化,1:读取中, 2::已读取, 3:交互中, 4::完成status =(404 : 文件没找到,用户端错误,200:成功, 500 :服务器内部错误, 303 : 服务器错误
    //  6.callback
    
    // var xml = null;
    // if(window.XMLHttpRequest{
    //  xml = new XMLHttpRequest();
    // }else{
    //  xml = new ActiveXObject('Microsoft.XMLHTTP');
    // }
    // xml.open('GET', 'getNews.php', true);
    // xml.send();
    // xml.onreadystatechange = function(){
    //  if(xml.readyState == 4){
    //      if(xml.status == 200){
    //          console.log('3333');
    //      }
    //  }
    // }
    function Ajax(method, url, flag, data, callback){
        var app = null;
        if(window.XMLHttpRequest){
            app = new window.XMLHttpRequest();
        }else{
            app = new window.ActiveXObject('Microsoft.XMLHTTP');
        }
        method = method.toUpperCase();
        if(method === 'GET'){
            app.open(method, url + '?' + data, flag);
            app.send();
        }else if (method === 'POST'){
            app.open(method, url, flag);
            app.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
            app.send(data);
        }
        app.onreadystatechange = function(){
            if(app.readyState === 4){
                if(app.status === 200){
                    callback(app.responseText);
                }else{
                    alert('error');
                }
            }
        }
    }
    
    /*************************************************/
    // var aaa = 'username=aimee&age=18';
    // function ajax(method, url, flag, data, callback) {
    //     var xml = null;
    //     if(window.XMLHttpRequest){
    //         xml = new XMLHttpRequest();
    //     }else {
    //         xml = new ActiveXObject('Microsoft.XMLHTTP');
    //     }
    //     if(method == 'GET') {
    //         xml.open(method, url + '?' + data, flag);
    //         xml.send();
    //     }else if(method == 'POST') {
    //         xml.open(method, url, flag);
    //         xml.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    //         xml.send(data);
    //     }
    //     xml.onreadystatechange = function () {
    //         if(xml.readyState == 4) {
    //             if(xml.status == 200) {
    //                 callback(xml.responseText);
    //             }
    //         }
    //     }
    // }
    // function showData(data) {
    //     console.log(data)
    // }
    // function alertData(data) {
    //     alert(data);
    // }
    // ajax('GET', 'post.php', true, aaa, alertData); 
    

    2.js时间线

    <!DOCTYPE HTML>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title></title>
        <!--<script type="text/javascript" src="js-timeline-717.js" defer> 
            开启异步加载外部文件
            像名是defer值是defer的属性我们可以缩写
            加载完成之后拿回来先不执行,
            1.直到dom文档解析完成之后(是指domtree解析完成)
            2.它只有IE能用   
            3.它里面也可以写东西,在引入外部文件的情况下(ie6之前) 
        </script>-->
    
        <!-- // <script type="text/javascript" src="js-timeline-717.js" async>
             开启异步加载外部文件
             1.它什么时候加载完成,什么时候执行
             2.它是主流浏览器所采用的,也是w3c标准所用的
             3.它里面不能写脚本
        </script> -->
        <!-- 以上两个都不阻塞页面 ,但不适合做兼容性写法,因此这两个都不用-->
    </head>
    <body>
    <!--    dom tree    css tree
              dom css结合形成
              rander tree(渲染树)
     -->
     <!-- <img src="" alt=""> 先把标签塞到dom 树,然后异步加载图片-->
    
     <!-- 实现按需加载-->
     <style type="text/css">
        .div{
            display: inline-block;
            width: 60px;
            height: 30px;
            border-top:0px;
            border-bottom:solid 1px black;
            border-left:0px;
            border-right:solid 1px black;
        }
     </style>
        <div class="div"align='center'style=""valign="top">name</div>
        <script>
            var obj = {
                'number': '序号',
                'teamname': '队名',
                'name':'姓名'
            }
            oDiv = getElementsByTagName('div');
    
            console.log(odiv.value);
            // obj1 = new object(){
            // }
            // var oBtn = document.getElementsByTagName('button')[0];
            // oBtn.onclick = function(){
            //  var oScript = document.createElement('script');
            //  oScript.src="js-timeline-717.js";
            //  document.body.appendChild(oScript);         
            // }
    
    
            // var oBtn = document.getElementsByTagName('button')[0];
            // oBtn.onclick = function(){
            //  canLoad();
            // }
            // function canLoad(){
            //  var oScript = document.createElement('script');
            //  oScript.src="js-timeline-717.js";
            //  document.body.appendChild(oScript);
            //  setInterval(function(){
            //      test();
            //  },(1000))           
            // }
            // canLoad();
    
            // function canLoad(url,callback){  //异步加载封装函数
            //  var oScript = document.createElement('script');
            //  oScript.src=url;
            //  if(oScript.readyState){
            //      oScript.onreadystatechange = function(){
            //          oScript.onreadystatechange = null;
            //          if(oScript.readyState == "complete"||oScript.readyState == 'loaded'){
            //              obj[callback]();
            //          }
            //      }               
            //  }else{
            //      oScript.onload = function(){ //IE没有onload,但IE有readystate :  loading  complete||loaded
            //          oScript.onload = null;
         //                 obj[callback]();
            //      }           
            //  }
            //  document.body.appendChild(oScript);
            // }
            // canLoad('js-timeline-717.js','test');
    
            // js加载时间线,目的提高页面加载效率
    
            // 给他一个监听
            // document.onreadystatechange = function(){
            //  console.log(document.readyState)
            // }
            // document.addEventListener('DOMContentLoaded',function(){
            //  console.log('DOMContentLoaded');
            // })
        </script>
    </body>
    </html>
    //js代码
    'use strict'
    // // console.log('a');
    // // Json是一种数据格式,属性名必须用双引号
    // var obj = {"name" : "byron","age" :18};
    // //这种格式是为了规范标准前后端
    // // 数据包以字符串或者数字传送
    // // ajax  async javascript and xml 用javascript异步的获取数据格式
    
    // var obj = {"name" : "byron","age" :18};
    // console.log(JSON.stringify(obj));//把对象封装成字符串
    
    // var obj = '{"name" : "byron","age" :18}';
    // console.log(JSON.parse(obj));//把字符串还原为对象
    
    // 异步加载js
    var obj = {
        test:function(){
            console.log('js-timeline-717.js')
        }
    }
    
    
    'use strict'
    // console.log('a');
    // BOM: Browser Object Model
    //window对象
    // 集合
    // iframe也可以引用窗口 
    
    // 方法
    // alert()  
    // clearInterval()
    // clearTimeout()
    // open(URL/name/features/replace)
    // close()
    // confirm()//给出弹窗,返回布尔值
    // print()//打印页面
    // prompt()//显示可提示用户输入的对话框
    // resizeTo(width,heigh)//用于设置宽高
    // scrollBy()
    // scrollTo()
    
    // 属性
    // closed
    
    // function scrollWindow()
    //   {
    //   window.scrollTo(1000,500)
    //   }
    
    // navigator
    // history
    // location :hash host herf pathname port protocol search
    
    // Doctype渲染模式
    
    // lable
    
    
    // 标签上面天生就有的叫特性,没有的叫做属性
    // setAttribute('key', 'value');可以强制给标签加属性
    
    // 图片预加载
    // var oImg = new Image();
    // oImg.src = 'xxx.jpg';
    // oImg.onLoad = function(){
    //  document.body.appendChild(oImg);
    // }
    
    // 图片懒加载:需要才加载
    
    // Math.random();生成一个[0,1)的随机数
    // var oUl = document.getElementsByTagName('ul')[0];
    // for(var i = 0; i < 1000; i++){
    //  var oLi = document.createElement('li');
    //  oUl.appendChild(oLi);
    // }
    // console.log('a');
    
    var oUl = document.getElementsByTagName('ul')[0];
    var oFrag = document.createDocumentFragment();//创建文档碎片
    for(var i = 0; i < 1000; i++){
        // debugger;//可以这样设置断点找错误,也可以在浏览器里面设置断点
        var oLi = document.createElement('li');
        oFrag.appendChild(oLi);//用文档碎片先装li
    }
    oUl.appendChild(oFrag);//将文档碎片插ul中
    // cdn缓存服务器,解决网络拥塞问题,它可以实现浏览器的缓存
    

    3.前端基础(h,p,ul,ol,li,img,)

    <!-- <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    <p>This is paragraph</p>
    <h1>标题</h1>
    <h2>标题</h2>
    <h3>标题</h3>
    <h4>标题</h4>
    <h5>标题</h5>
    <h6>标题</h6>
    <strong>
    <em>斜体</em>
    </strong>
    <del>188</del>
    <div style="width:100px;height:100px"></div>
    html编码
    &nbsp&nbsp&nbsp1&nbsp空格
    &lt;&gt;
    a<br>换行b
    有序列表
    大家喜欢的marvel英雄
    orderlist
    <ol type="a" reversed="reverded"start="5">
    <li>精钢狼</li>
    <li> 变形精钢  </li>
    <li>  美国队长 </li>
    <li>  23 </li>
    square
    disc
    </ol>
    <ul type="circle">
    <li>精钢狼</li>
    <li> 变形精钢  </li>
    <li>  美国队长 </li>
    <li>  用于功能子项的编写 </li>
    list item 
    </ul>
    注释的作用:1.备注 2.调错
    快捷键ctri+?
       <img src="网址" alt="这是xx" title="">
       1.网上的url
       2.相对地址 (在同一文件夹下,可以略写)
       3.绝度地址(全写)
       alt 图片占位符
       title 图片提示符
       <!-- 英语趣配音 英语流利说 -->
    <!-- <a href="" target="-">www.baidu.com</a>超文本引用 -->
    <!-- 1.超级链接 a的缩写anchor
         2.锚点
         3.发邮件/打电话
         4.协议限定符-->
         <!-- <div id="one">爱心</div>
         <br>
         <a href="#one">123</a>
             <table>
              <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
              </tr>
             </table>      
    div+css
    </body>
    </html> --> -->
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style type="text/css">
    *{
    margin: 0;
    padding: 0;
    }
    ul{
    list-style: none;
    }
    ul>li{
      float: left;
      margin: 0 8px;
      padding: 0 5px;
      font-weight:bold;
      font-size: 14px;
      height: 26px;
      line-height: 26px;
      color: #f40;
      }
      ul>li:hover{
        background-color: #f40;
        color: #fff;
        border-radius: 15px;
    
      }
      </style>
    </head>
    <body>
    <!-- <div style="width:100px;height:100px;background-color:yellow;">a&nbsp2&lt3&gt1</div>
     -->
    <!-- <ul type="square" >
    <li>天猫</li>
    <li>聚划算</li>
    <li>天猫超市</li>
    </ul> -->
    <!-- /*<style type="text/css">
    *{
    margin: 0;
    padding: 0;
    }
    ul{
    list-style: none;
    }
    ul>li{
      float: left;
      margin: 0 8px;
      font-weight:bold;
      font-size: 14px;
      height: 26px;
      line-height: 26px;
      color: #f40;
      }
      </style>*/ -->
    <!-- 
    a<br>b换行 -->
    <!-- <img src="F:\相册\thumb\IMG_20160916_095010.jpg.JPG" alt="这是湖面" title="湖面"> -->
    <!-- <a href="http://www.baidu.com " target="_blank">www.baidu.com</a> -->
    <a href="javascript:while(true){alert('你想多了吧')}">高清美图</a>
    </body>
    </html>
    

    4.前端基础(css选择器,权重,select,form)

        /*span{
            width:100px;
            height:100px;
            background-color:  yellow; 
        }
        #only {width:200px;
            height:200px;
            background-color: red;
        }*/
        div.demo{
            display: inline-block;
            background-color: red;
            background-image: url("C:\Users\BYRON\Desktop\成绩单.png");
        }
    /*s*/
        /*div{
            width:100px;
            height:100px;
            background-color:yellow;
        }*/
        /*span{
            width:100px;
        }*/
    /*  *{
            background-color:black;
            width:400px;
            height:400px;
        }*/
        #only{
            width:250px;
            height:250px;
            background-color:blue;
        }
        /*优先级:*+!important>行间样式>id>class>标签>通配符
                 但id与class不能叠加
                  div里层层递减
                  一个人可以对应几个class--.*/
             /* 权重:
                  *——0
                  tag——1
                  class——10
                  id——100
                  行间——1000
                  !important——无限大*/
                  /*西部世界
                  黑镜*/
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link rel="stylesheet" type="text/css" href="lesson3.css">
    </head>
    <body>
    <!-- <form method="get" action="地址">
    <!--组件 数据名  数据值 -->
    <!-- <p>账户:<input type="text" name="username"></p>
    <p>密码:<input type="password" name="password"></p>
    <input type="submit">
    
    1.苹果<input type="radio" name="fruit" value="苹果"> --><!-- 单选框 --><!-- name值相同 --><!-- checkbox复选框 -->
    <!-- 2.西游<input type="radio" name="fruit" >
    3.茄子<input type="radio" name="fruit">
    
    <input type="submit">
    <h1>chose your sex</h1>
    <p>female:<input type="radio" name="sex" value="female"checked="checked"></p>
    <p>  male:<input type="radio" name="sex" value="male"></p>
    <input type="submit"value="登录">
    <input type="text" name="username" style="color:#999" value="请输入关键字" onfocus="if(this.value==''){this.value='请输入关键字';this.style.color='#424242'}" onblur="if(this.value==''){this.value='请输入关键字'">
    
    
    <h1>PROVINCE</h1>
    <select name="province">
        <option>黑龙江</option>
        <option>吉林</option>
        <option>辽宁</option
    </select>
    </form> -->
    <!-- css的引入 -->
    <!-- 1.行间样式 -->
    <!-- 2.页面级css -->
    <!-- 3.外部css文件 -->
    <!-- 4.@import -->
    <!-- 1.id选择器 -->
    <!-- 2.class选择器 -->
    <!-- 3.标签选择器 -->
    <!-- 4.通配符选择器 -->
    <div id="only">123</div>
    <!-- <div id="only1">234</div>
    darryRing -->
    
    <div class="demo">123</div>
    <!-- 1.优先级
    2.标签分类 -->
    </body>
    </html>
    <html lang="en">
    <head> 
        <meta charset="UTF-8">
        <title>Document</title>
        <link rel="stylesheet" type="text/css" href="lesson3.css">
    </head>
    <body>  
        <form method="get" action="">
            <p> 
                username:<input type="text" name="username" style="color:#999" onfocus="if(this.value=='请输入关键字'){this.value=''; this.style.color='#424242';}"onblur="if(this.value==''){this.value='请输入关键字';this.style.color='#999'}"value="请输入关键字">
            </p>
            <p>
                password:<input type="password" name="password">
            </p>
            <h6>choose your city!!!</h6>
            <select name="province">
                <option value="bei">北</option>
                <option value="shang">上</option>
                <option value="guang">广</option>
                <option value="sheng">深</option>
            </select>
            <input type="submit" value="提交">             
        </form>
        <!-- 1.行间引入
        <div style="width:100px;height:100px;background-color:red;">123456789</div> -->
        <!-- 2.页面级css
        <style type="text/css">
        div{
        width: 100px;
        height: 100px;
        background-color: green;
        }
        </style>
        <div>5616</div> -->
        <!-- 3.外部引入 
        <link rel="stylesheet" type="text/css" href="lesson3.css">-->
        <!-- 选择器
            1.id
            2.class
            3.标签 
            4.通配符*
            5.父子/派生
              直接子元素
              css88参考手册
            例子:
                <div id="only"class="only1">
                <span>159753</span>
                </div>
                <div class="only1">
                <span>159753</span>
                </div>-->
                
    </body>
    </html>
    

    5.前端基础(其余所有标签)

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <link rel="stylesheet" type="text/css" href="lesson4.css">
    </head>
    <body>
        <div>123</div>
        <span>123s</span>
        <div>叫你撒看</div>
        <!-- <div>块级元素:
                1.可以设置宽和高
                2.独自占据一行
                div p ol li ul form address
             行级元素:
                1.不能设置宽和高
                2.根据自身内容决定占据空间大小
                块级元素列表:
    <address>定义地址
    <caption>定义表格标题
    <dd>定义列表中定义条目
    <div>定义文档中的分区或节
    <dl>定义列表
    <dt>定义列表中的项目
    <fieldset>定义一个框架集
    <form>创建 HTML 表单
    <h1>定义最大的标题
    <h2>定义副标题
    <h3>定义标题
    <h4>定义标题
    <h5>定义标题
    <h6>定义最小的标题
    <hr>创建一条水平线
    <legend>元素为 
    <fieldset>元素定义标题
    <li>标签定义列表项目
    <noframes>为那些不支持框架的浏览器显示文本,于 frameset 元素内部
    <noscript>定义在脚本未被执行时的替代内容
    <ol>定义有序列表
    <ul>定义无序列表
    <p>标签定义段落
    <pre>定义预格式化的文本
    <table>标签定义 HTML 表格
    <tbody>标签表格主体(正文)
    <td>表格中的标准单元格
    <tfoot>定义表格的页脚(脚注或表注)
    <th>定义表头单元格
    <thead>标签定义表格的表头
    <tr>定义表格中的行
    
             行级块元素
                1.可以设置宽高
                2.根据自身内容决定占据空间大小
                img input
                行内元素列表:
    <a>标签可定义锚
    <abbr>表示一个缩写形式
    <acronym>定义只取首字母缩写
    <b>字体加粗
    <bdo>可覆盖默认的文本方向
    <big>大号字体加粗
    <br>换行
    <cite>引用进行定义
    <code>定义计算机代码文本
    <dfn>定义一个定义项目
    <em>定义为强调的内容
    <i>斜体文本效果
    <img>向网页中嵌入一幅图像
    <input>输入框
    <kbd>定义键盘文本
    <label>标签为
    <input> 元素定义标注(标记)
    <q>定义短的引用
    <samp>定义样本文本
    <select>创建单选或多选菜单
    <small>呈现小号字体效果
    <span>组合文档中的行内元素
    <strong>语气更强的强调的内容
    <sub>定义下标文本
    <sup>定义上标文本
    <textarea>多行的文本输入控件
    <tt>打字机或者等宽的文本效果
    <var>定义变量
             盒模型
             
            </div> -->
    </body>
    </html>
    

    6.前端基础(position定位,bfc,文档流)

    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="lesson5.css">
    </head>
    <body>
        <!-- 
        bfc
        标准文档流布局
        层模型
    
        position:absolution;
        1.被抽离更高的层面上了,后面元素看不到
        2.他以最近离他有定位的父级进行定位,如果没有以浏览器边框为坐标轴定位
        3.Z-index提层
        相对定位
        position:relative;
        固定定位 position:fixed;
        1.脱离原来位置进行定位
        2.一浏览器边框进行定位
        经典布局:三列布局
             -->
         <div class="q">
        <div class="w">djfk</div>
        </div>
    </body>
    </html>
    

    7.javascript基础语法

    // var a=123;
    // document.write(a);
    // var num=1&&2;
    // 1<2&&document.write('举案说法你看得见')
    
    // var score = parseInt( window.prompt('input'));
    //  if(score>90&&score<=100){
    //  document.write('alibaba');
    //  }
    //  if(score>80&&score<=90){
    //  document.write('tencent')
    //  }
    //  if(score>70&&score<=80){
    //  document.write('新浪')
    //  }
    //  if(score>60&&score<=70){
    //  document.write('蘑菇街')
    //  }
    //  if(score<=60){
    //  document.write('shit!!!');
    //  }
    // 比较三个数的大小:
        // var a = parseInt(window.prompt('input'));
        // var b = parseInt(window.prompt('input'));
        // var c = parseInt(window.prompt('input'));
        // if(a>b) {
        //  if(a>c){
        //      document.write(a);
        //  }else{ 
        //      document.write(c);
        //  }
        // }else{
        //  if(b>c){
        //      document.write(b);
        //  }else{
        //      document.write(c);
        //  }
        // }
        // var count=0;
        // for(var i=0;i<10;i++){
        //  count+=i;
     //   }
     //     document.write(count);
     // for(i=0;i<100;i++){
     //     document.write(i+' ')
     // }
     // var i=100;
     // for(;i--;){
     //     document.write(i+" ")
     // }
     // for(var i=0;i<100;i++){
     //     if(i%2!=0&&i%3!=0){
     //         document.write(i+" ")
     //     }
     // }
    //  var count=0;
    //  for(var i=0;i<1000;i++){
    //  count+=i;
    //  if(count>=200){
    //      document.write(i);
    //      i=2000;
    //  }
    // }
    // never-ending loop(无限死循环)
    // 作业
    // 1.计算2的n次幂,n可输入,n为自然数。
    // var num = parseInt(window.prompt('input'));
    // var mi=1;
    // if(num>0){
    //  for(var i=1;i<=num;i++){
    //      count*=2;
    //  }
    // document.write(count)
    
    // }else {
    //  document.write('1');
    // }
    // 2.计算n的阶乘,n可输入
    // var num = parseInt(window.prompt('input'));
    // var jiecheng=1;
    // if(num>0){
    //  for(var i=1;i<=num;i++){
    //      jiecheng*=i;
    //  }
    //  document.write(jiecheng)
    // }else {
    //  document.write('1');
    // }
    // 3.著名的斐波那契额数列
    // var n = parseInt(window.prompt('input'));
    // var f1=1;
    // var f2=1;
    // var temp=1;
    // for (var i=3;i<=n+1;i++){
    //  var temp = f2;
    //  f2 = f1 + f2;
    //  f1 = temp;
    // }
    // document.write(temp);
    // 1 1 2 3 5 8 13 21
    // var n = prompt("请输入数字n")
    
    
    // var num1 = 1;
    
    // var num2 = 1;
    
    // for(var i = 3; i <= n; i++) {
    
    // var temp = num2;
    
    // num2 = num1 + num2;
    
    // num1 = temp;
    
    // }
    
    // alert(num2);
    
    // 4.编写一个程序,输入一个三位数的正整数,输出时反向输出
    // var num = parseInt(window.prompt('input'));
    // var b=num%1000;
    // var s=num%100;
    // var g=num%10;
    // document.write(g*100+(s-g)+(b-s)/100);
    // 5.输入a,b,c三个数字,打印出最大的。
        // var a = parseInt(window.prompt('input'));
        // var b = parseInt(window.prompt('input'));
        // var c = parseInt(window.prompt('input'));
        // if(a>b) {
        //  if(a>c){
        //      document.write(a);
        //  }else{ 
        //      document.write(c);
        //  }
        // }else{
        //  if(b>c){
        //      document.write(b);
        //  }else{
        //      document.write(c);
        //  }
        // }
    // 6.打印出100以内的质数
    // var count=0;
    // for( var i=1;i<=100;i++){
    //  for( var j = 0 ;j<=i;j++){
    //      if(i%j==0){
    //          count++;
    //      }   
    //  }
    //  if(count==2){
    //      document.write(i+" ");
    //  }   
    //  count=0;
    // }
    // var count=0;
    // for( var i=2;i<=100;i++){
    //  for( var j = 1 ;j<=Math.sqrt(i);j++){
    //      if(i%j==0){
    //          count++;
    //      }   
    //  }
    //  if(count==1){
    //      document.write(i+" ");
    //  }   
    //  count=0;
    //  }
    <!-- 块级元素可以放块级元素
                 p子元素不能放div -->
    
    <!-- ASCII
    65  A   66    B
    97  a   98    b
        '2'>'10'
    unfined=null!=0;
    逻辑词:
        $$规则:
        1.先判断第一个表达式的运算结果,然后往后看
        2.如果第一位运算结果为假,则返回第一位结果。
        实例:
        1.用在if语句
        2.用作短路语句
        ||规则:
        找到真为止
        实例:
        1.if
        2.后续要用到e在,在IE浏览器中e没有值,在google chrome下有值,用于浏览器的兼容性
        !
        1.把后面的值先转换成布尔值,然后取反
        2.!!把字符串转换成布尔值
        if语句:if(条件成立){执行的代码}else{不成立执行的代码};
    
        for循环执行顺序
    

    8.javascript数据类型

    // var s=4;
    // document.write(s);
    
    // 课堂记录
    // switch (){
    //  case 1:
    //  document.write();
    //  break;
    //  case 2:
    //  document.write();
    // break;
    // default:
    // document.write(error);
    // }
    // 不受值类型约束
    // break用于跳出循环语句
    // continue结束本次循环
    // 数组   对象
    // var a="01010101";
    // var b=Number(null);
    // document.write(b);
    // var c = parseInt("a" , 2);
    // var d = c.toString(16);
    // document.write(d);
    // for(var i=0;i<10;i++){
    //  if(i%5==0){
    //      continue;
    //  }
    //  document.write(i);
    // }
    // var arr=[1,2,3,4,5];
    // document.write(arr);
    // document.write(arr.length);
    // var obj={
    //  lastname : 'deng', 
    //  age : 50,
    //  sex : "undefined",
    //  wife : { lastname : "xiaobao"}
    // }
    // obj.lastname="xiaoddeng";
    
    // var num=NaN;
    // document.write(typeof(num));
     // var num=parseInt('1234a');
     // console.log(num);
     // 作业:
     // var  num=10101010;
     // console.log(alert(typeof(num)));
     // console.log(alert(typeof(undefined)));
      // console.log(alert(typeof(NaN)));
    // alert(typeof(null));object
    
    // var a="123abc"
    // alert(typeof(+a));number
    // alert(typeof(!!a));boolean
    // alert(typeof(a+''));toString
    
    // alert(1=='1');true
    // alert(NaN==NaN);false
    // alert(NaN==undefined);false
    // alert(11=='11');true
    // alert(1==='1');false
    // alert(parseInt("123abc"));123
    
    // var num = 123123.345789;
    // alert(num.toFixed(3));123123.346;
    // alert(typeof(typeof(a)));String
    

    9.javascript函数,预编译

    // function bar(){
    //  return foo;
    //  foo=10;
    //  function foo(){}
    //  var foo=11;
    // }
    // console.log(bar());
    
    // console.log(bar());
    // function bar(){
    //  foo = 10;
    //  function foo(){}
    //  var foo = 11;
    //  return foo;
    // }
    
    // function fn(a){
    //  var a=123;
    //  function a(){}
    //  var b = function (){}
    //  function d () {}
    // }
    // fn(1);
    //第一二步 
    //var AO = {
    //  a : undefined,
    //  b : undefined
    // }
    // 第三步
    //var AO = {
    //  a : 1,
    //  b : undefined
    // }
    // 第四步
    //var AO = {
    //  a : function a () {},
    //  b : undefined,
    //  d : function d () {}
    // }
    
    // 5.1lesson9
    
    
    // 预编译
    // 在执行前,形成ao对象
    // Ao{
    
    // }
    // 找形参和变量声明
    // a : undefind,
    // b : undefind,
    // 执行期上下文
    // 作用域解释
    // 闭包
    
    
    // 累加器
    // function demo(){
    //  var count = 0;
    //  function a(){
    //      count ++;
    //      console.log(count);
    //  }
    //  return a;
    // }
    // var add = demo();
    // add();
    // add();
    // add();
    // add();
    // function eater () {
    //  var food = "";
    //  var obj = {
    //      eat : function(){
    //          if(food){
    //              console.log('I am eating ' + food);
    //              food = "";
    //          }else{
    //              console.log("empty")
    //          }
    //      },
    //      pushFood : function (myFood){
    //          food = myFood;
    //      }
    //  }
    //  return obj;
    // }
    
    // var eater1 = eater();
    
    // eater1.pushFood('apple');
    // eater1.eat();
    // eater1.eat();
    
    // 立即执行函数:
    // (特点:执行完就再也找不到了,有初始化的作用)
    // var num = (function b (a,b){
    //  console.log('a');
    //  return a + b
    // }(1,2));
    // num=3
    
    // 能被执行的一定是表达式
    // 函数只能被定义或者被执行,但只能实现一个
    // 前面加一元正负运算符(除*/外)
    // (function (){
    //  console.log('a');
    // }())
    //w3c提倡的形式
    
     
     
    // function test (){
    //  var arr =[];
    //  for (var i = 0; i < 10; i ++){
    //      arr[i] = function(){
    //          console.log(i);
    //      }
    //     }
    //     return arr
    // }
    // var myArr = test();
    // for (var j = 0; j < 10; j ++){
    //  myArr[j]();
    // }
    
    
    // function test (){
    //  var arr =[];
    //  for (var i = 0; i < 10; i ++){
    //      (function (j){
    //          arr[j] = function(){
    //              console.log(j);
    //          }
    //      }(i));
    //     }
    //     return arr
    // }
    // var myArr = test();
    // for (var j = 0; j < 10; j ++){
    //  myArr[j]();
    // }
    

    10.对象,及增删改查

    // 对象 
    // var mrDeng = {
    //  lastName : "Deng",
    //  firstName : "baobao",
    //  age : 36,
    //  sex : "male",
    //  health : undefined,
    //  wife : {
    //      name : "xiaoliu"
    //  },
    //  card : ['visa','master','unionpay'],
    //  girlfriend :{
    //      name : 'xiaowang'
    //  },
    //  smoke : function(){
    //      console.log('I am smoking, cool!~~~');
    //  }
    
    // }
    // 增,删,改,查
    // 对象的创建方法
    // 1.对象字面量/对象直接量  plain Object
    // var obj = {
    
    // }
    // 2.构造函数 (1.系统自带2.人工自定义)
    
    // var obj = new Object();
    // Date ();
    
    
    // function Car(color){
        // 隐式创建 var this = {}
    //  this.color = color;
    //  this.heigth = 1400;
    //  this.lang = 4950;
    //  this.width = 1900;
    //  this.wheel = 4;
    //  this.health = 100;
    //  this.run = function(){
    //      this.health --;
       // return this;
    //  }
    // }
    // var car = new Car('red');
    // var car1 = new Car('green');
    
    // function Student(name,sex, age){
    //  this.name = name;
    //  this.sex = sex;
    //  this,age = age;
    //  this.school = 'duyi';
    //  this.grade = '9qi';
    //  this.teacher = 'prof.ji';
    // }
    
     // 小驼峰式/大驼峰式(命名方法)
    
    // 1.用new就会隐式创建 var this = {}
    // 2.封装
    // 3.后面会返回this
    
    // 包装类 :目的为了不报错
    // 原始值 没属性和方法(原始值不可更改)
    // 引用值 
    
    // var str = 'abcd';
    // //new String('abcd').length -->4
    // str.length;
    // //delete
    
    
    
    
    
    // 只有表达式能执行
    // 当一个表达式被执行之后,它就会失去对原有函数的引用
    // 解释,动态    pathy脚本类语言
    
    
    
    // 每次执行完,就会消失
    
    // 作业
      //       1.
      //       a = 100;
            
            // function demo(e) {
            
      //                   function e() {}
            
            //               arguments[0] = 2;
           
      //                 document.write(e + "  ");
            
            //          if(a) {
                
            //                   var b = 123;
            
            //                   function c() {
            
            
      //                     // 猪都能做出来
            
            //                  }
            
            //               }
            
            //          var c;
            
            //               a = 10;
            
            //               var a;
            
            //          document.write(b + "  ");
            
            //               f = 123;
            
            //               document.write(c + "  ");
            
            //          document.write(a + "  ");
            
            // }
            
            // var a;
            
            // demo(1);
            
            // document.write(a + "  ");
            
            // document.write(f + "  ");
    
    
            
            
                
            
            
            // 2.
            
            // var str = false + 1;
            
            // document.write(str);
            
            // var demo = false == 1;
            
            // document.write(demo);
            
            // if(typeof(a)&&-true + (+undefined) + ""){
            
            //     document.write('基础扎实');
            
            // }
            
            // if(11 + "11" * 2 == 33) {
            
            //     document.write('基础扎实');
            
            // }
            
        //  !!" " + !!"" - !!false||document.write('你觉得能打印,你就是猪');
    
    // lesson12
    
    // 大样本随机对照双盲测试
    
    // 对象 object  让存储更清晰,更直白
    
    // 存放方法和属性
    
    // 可以执行的操作增删改查
    
    // var mrDeng = {
    //  name : "deng",
    //  age : 35,
    //  sex : "male",
    //  son : "xiaodeng",
    //  wife : {name : 'nvwang'},
    //  MyName : function() {
    //      console.log('we are human!');
    //  }
    // }
    // delete mrDeng.age
    
    
    // plainobject 对象字面量/对象直接量
    
    // 构造函数 工厂
    // var obj = new object();
    
    // 自定义构造函数(大驼峰式)
    // function Person() {}
    // var person = new Person();
    // 可以通过传递参数改变
    
    // 系统内部原理
    // 原始值不能有属性不能有方法
    // 包装类
    // 当访问值时系统会构造一个对象然后销毁
    
    // String 有长度
    // function Person(name, age, sex){
    //  this.name 
    // }
    
    
    // 改变this指向,参数列表不同
    

    11.继承(圣杯模式)

    // 圣杯模式:
    // 第一种
    // var inherit = (function () {
    //  var F = function () {};
    //  return function (Origin, target){
    //      F.prototype = Origin.prototype;
    //      Target.prototype = new F();
    //      Target.prototype.constructor = Target;
    //      Target.prototype.uber = Origin.prototype;
    //  }
    // }())
    // 第二种
    // function inherit(Origin,Target){
    //  function F(){};
    //  F.prototype = Origin.prototype;
    //  Target.prototype = new F();
    //  Target.prototype.constructor = Target;
    //  Target.prototype.uber = Origin.prototype;
    // }
    

    12.函数原型、原型链

    // 原型
    // Person.prototype = {
    //  abc = 123
    // }
    // 这个属性天然就有
    // 对象  有属 性,有方法
    // 一切皆对象5
    
    // 原型定义 :原型是function对象的一个属性
    // ,它定义了构造函数制造出的对象的公共祖先。
    // 通过该构造函数产生的对象,可以继承该原型的属性和方法。
    // 原型也是对象
    
    // 增  
    // 改  不能通过改变自己而改变原型
    //    但可以通过改变原型改变儿子的属性
    // 删  .detele  
    // 查   
    // Person.prototype.abc = '123';
    // function Person(){
    //  this.name = 'laodeng';
    //  this.sex = 'male'
    // }
    // var person = new Person();
    // var person1 = new Person();
    // Person.prototype.LastName = 'yinxuan';
    // Person.prototype.sex = 'female';
    
    // 优点1:可以利用原型特点和概念,提取共有属性
    // 优化前 
    // function Car(color){
    //  this.height = 1400;
    //  this.width = 1900;
    //  this.length = 4900;
    //  this.color = color;
    //  this.name = "BMW";
    // }
    // var car = new Car('red');
    // var car1 = new Car('green');
    // 代码重复较多,效率较低
    // 优化后
    // Car.prototype.height = 1400;
    // Car.prototype.width = 1900;
    // Car.prototype.length = 4900;
    // Car.prototype.name = "BMW";
    // function Car(color){
    //  //var this = {
    //  //  __proto__ : Car.prototype
    
    //  //}
    //  this.color = color;
    // }
    // var car = new Car('red');
    // var car1 = new Car('green');
    
    // Person.prototype.lastName = "Cong";
    // function Person(){
    
    // }
    // var person = new Person();
    // var obj = {
    //  lastName : "Luo"
    // } 
    
    // 4.constructor 建筑物 构造器
    // var person2 = new person.constructor(); 
    
    // 原型链
    //一个对象查看一个属性,如果这个对象上面没有这个
    //属性,那么系统就会沿着这个对象的————proto————去继续找这个属性,
    //而且,基本每个对象都有————proto————
    // 原型上面可以有原型
    // Grand.prototype.lastName = "Ji";
    // function Grand(){
    
    // }
    // var grand = new Grand();
    // Father. prototype = grand;
    // function Father(){
    
    // }
    // function Person(){
    
    // }
    // var person = new Person();
    
    // var father = new Father();
    
    // Son.prototype = fatrer;
    
    // 绝大多数对象都继承自object.prototype
    
    // javascript 里面绝大多数对象都继承自object.prototype
    
    // var demo = {
    //  name : '123'
    // }
    // var obj = Object.create(null);
    // document.write(demo.toString());
    // obj.toString = function(){
    //  return "他可以有toString属性"
    // }
    // document.write(obj);
    // document.write(123);
    // document.write({});
    // document.write([1,3,5,3,6]);
    // document.write("abc");
    // Object.prototype.toString.call(123);
    // 目的把数字文本化展现出来
    
    // 做题  (用友笔试题)
    // display : none;别展示出来,能让元素彻底隐藏
    // visibility : false; 含蓄的隐藏
    // a标签里面不能包含a标签
    // div里面不能包含p标签
    // parseInt用于截断字符串中的非数字部分
    // 引用值比的是地址
    

    13.this

    // document.write(123);
    // function Person(){
    //  this.name = 'peter';
    //  this.age = 23;
    // }
    // var person = new Person();
    // var obj = {
    //  sex : "female"
    // }
    // Person.call(obj);//call 改变了this的指向
    
    // function Person(name, age){
    //  this.name = name;
    //  this.age = age;
    // }
    // var person = new Person();
    // var obj = {
    //  sex : "female"
    // }
    // Person.call(obj, 'Byron', 22);
    
    //用途:改变this指向,传参列表不同
    // function Person(name, age, sex){
    //  this.name = name;
    //  this.age = age;
    //  this.sex = sex;
    // }
    // function Student(name, age, sex, grade, teacher){
    //  Person.call(this, name, age, sex);
    //  this.grade = grade;
    //  this.teacher = teacher;
    
    // }
    // var student = new Student('Byron', 20, 'male', 100, 'Ji');
    
    //apply的用法和call类似,不过它里面只能传除this之外的一个参数,
    //所以如果要传多个参数时,可以采用数组的方法
    //上面的这个等价于下面
    
    // function Person(name, age, sex){
    //  this.name = name;
    //  this.age = age;
    //  this.sex = sex;
    // }
    // function Student(name, age, sex, grade, teacher){
    //  Person.apply(this, [name, age, sex]);
    //  this.grade = grade;
    //  this.teacher = teacher;
    
    // }
    // var student = new Student('Byron', 20, 'male', 100, 'Ji');
    
    // 共享原型
    // Person.prototype.lastName = "Byron";
    // function Person(){
    
    // }
    // Son.prototype = Person.prototype
    // function Son(){
    
    // }
    // var son = new Son();
    //A构造函数, 想继承, B构造函数的原型
    //共享原型的方式
    // function inherit(Origin, Target){
    //  Target.prototype = Origin.prototype;
    // }
    // Person.prototype.lastName = 'Byron';
    // function Person(){
    
    // }
    // function Son(){
    
    // }
    // // 圣杯模式
    //1.
    // function inherit(Origin, Target){
    //  function F(){};
    //  F.prototype = Origin.prototype;
    //  Target.prototype = new F();
    // Target.prototype.constructor = Target;
    // Target.prototype.uber = Origin.prototype;
    // }
    // inherit(Person, Son);
    //2.雅虎YUI3
    // var inherit = (function(){
    //  var F = function () {};
    //  return function(Origin, Target){
    //  F.prototype = Origin.prototype;
    //  Target.prototype = new F();
    //  Target.prototype.constructor = Target;
    //  Target.prototype.uber = Origin.prototype;
    //  }
    // }())
    // 闭包的作用私有化变量
    // 14.第二小节
    // 命名空间,管理变量,避免变量污染,适用于模块开发
    // var org{
    //  department1 : {
    //      jicheng : {
    //          timer : 12;
    //          speed : 123;
    //      }
    //  },
    //  department2 : {
    
    //  }
    // }
    // var Jicheng = org.department1.jicheng
    // Jicheng.timer
    // 操作属性,属性名拼接,不能用点
    
    // 枚举,遍历(专门为对象)
    // for in (对人工定义的原型没有删选能力)
    // hasOwnProperty(用来删选自己原型上的东西,过滤方法)常与for in 连用
    // ...(属性)in...(对象) 用来判断 前面属性是后面对象上的
    // ...(A)instanceof...(B)  看A是否是由B构造出来的{a的原型链是否有B的原型}
    
    

    14.递归,克隆,

    // document.write('hello world!!!');
    // var a = 123;
    // RS coin
    // 比特币
    // 作业type
    // this
    // 1.函数预编译过程中this-->window
    // function test(){
    //  console.log(arguments);
    // }
    // test();
    // 2.在全局作用域中this-->window
    // 3.call/apply可以改变this的指向
    // 4.谁调用函数,this就指向谁
    
    // 递归
    // function fn(n){
    //  if(n == 1){
    //      return 1;
    //  }
    //  return n * fn(n - 1);
    // }
    // fn(10);
    
    // arguements.callee代表自身的引用
    // var num = (function (n){
    //  if (n == 1){
    //      return 1;
    //  }
    //  return n * arguments.callee(n - 1);
    // }(10))
    // function test(){
    //  console.log(arguments.callee);
    // }
    // test();
    
    // caller执行本函数的环境的应用
    // function test(){
    //  demo();
    // }
    // function demo(){
    //  console.log(demo.caller);
    // }
    // test();
    
    // 克隆  完全相同
    // 找到一个对象里面里的所有属性,
    
    // 1.判断是否是引用值typeof()  object  boolean  undefined  number  function  string
    // 2.查看 for in拆分
    // 3.查看具体的类型 (区别一个对象是数组还是对象三种方法1.Object.prototype.toString 2.constructor构造器3.instanceof(判断前后的原型链是否相同)分别判断类型)
    // 4.Object.prototype.toString    constructor   instanceof(判断前后的类型是否相同)分别判断类型
    // function deepClone(origin,target){
    //  var tostr = Object.prototype.toString,
    //  compare = '[object Array]';
    //  for (var prop in origin){
    
    //  }
    // }
    // 方法一(存在问题,引用值不独立)
    // function clone(origin,target){
    //  for(var prop in origin){
    //      if(origin.hasOwnProperty(prop)){//origin.hasOwnProperty(prop)对属性的判断,是不是自己的属性,而不是原型链上的东西
    //          target[prop]=origin[prop];
    //      }
    //  }
    // }
    // var obj = {
    //  name : "abc",
    //  age : 100,
    //  sex : "female",
    //  card : ['visa','daad','dada','deas']
    // }
    // var demo = {
    // }
    // // clone(obj,demo);
    // // 方法二
    // function deepClone(origin,target){
    //  var toStr = Object.prototype.toString,
    //      compare = '[object,Array]';
    //  for (var prop in origin){
    //      if(origin.hasOwnProperty(prop)){
    //          //判断每一个属性,是否是原始值
    //          if(typeof(origin[prop]) == 'object'){
    //              if(toStr.call(origin[prop]) == compare){
    //                  target[prop] = [];
    //              }else{
    //                  target[prop] = {};
    //              }
    //              deepClone(origin[prop], target[prop])
    //          }else{
    //              target[prop] = origin[prop];
    //          }
    //      }
    //  }
    // }
    // 三目运算符  2 > 1 ? 1 : 0 简化版的if,关注运算结果
    // function deepClone(origin,target){
    //  var toStr = Object.prototype.toString,
    //      compare = '[object,Array]';
    //  for (var prop in origin){
    //      if(origin.hasOwnProperty(prop)){
    //          //判断每一个属性,是否是原始值
    //          if(typeof(origin[prop]) == 'object'){
    //              target[prop] = (toStr.call(origin[prop]) == compare) ? [] : {};
    //              deepClone(origin[prop], target[prop])
    //          }else{
    //              target[prop] = origin[prop];
    //          }
    //      }
    //  }
    // }
    

    15.数组

    // 数组 定义两种方法  1.var arr = [];  2.var arr = new Array(20)
    //var arr = [20] != var arr = new Array[20]
    // 如果里面没有数组不报错 只会为undefined
    // 稀松数值 var arr = [1, 2, , , 3, 6]
    // var arr = [1, 2, 3];
    // 数组的读写
    // 改变原数组的数组方法
    // push在尾部加东西
    
    //(追加的小知识点
    // Person.prototype = {
    //  name : "proto",
    //  callName : function (){
    //      console.log(this.name);
    //  }
    // }
    // function Person(name){
    //  this.name = name;
    // }
    // var person = new Person('Jack');
    // person.callName();
    
    // var  arr = [2, 4, 1, 6, 25, 3, 6, 2, 0]
    // Array.prototype.push = function(){
    //  // this.[this.length] = target;
    //  for(var i = 0; i < arguments.length; i ++){
    //      this[this.length] = arguments[i];
    //  }
    // }
    // arr.push(4);
    // document.write(arr);
    
    // pop从后往前依次剪切(类似于栈操作first in last out) 
    // shift依次从头往出拿走   
    // unshift从头往里面加东西
    // reversre倒叙
    // splice(从第几位切,切多少长度,往切口插数)切片
    
    // sort 排序(按ascall码大小)
    // 当function 返回值为负数时,那么两相比较的数,前面的数在前
    // 当function 返回值为正数时,那么两相比较的数,后面的数在前
    // arr.sort(function(a, b){
        // if(a > b){
        //  return-1;
        // }else{
        //  return 1;
        // }
        // return a-b;
        // a-b升序
        // b-a降序
    // });
    
    // var deng = {
    //  name : "deng",
    //  sex : "male",
    //  age : 45
    // }
    // var cheng = {
    //  name : "st",
    //  sex : "male",
    //  age : 21
    // }
    // var sitong = {
    //  name : "charlie",
    //  sex : "male",
    //  age : 31
    // }
    // var arr = [sitong, cheng, deng];
    // arr.sort(function(a, b){
    //  return a.age - b.age;
    // })
    
    // 乱序排序
    // arr.sort(function(){
    //  return Math.random() - 0.5;
    // });
    
    // 不可改变原数组
    // toString把数组取出来
    // concat连接
    // slice(从第几位开始截取,截取几位)   内部原理:用负数加上长度
    // join用“ ”连起来
    // split 以什么为拆分点来拆分数组
    // var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    // arr = arr.join("_");
    // 原因散列操作要比栈操作块
    // 但实际应用栈操作块
    
    // 作业  
    // 1. type 封装一个类 function type(target){}    当传一个数返回一个结果类如 type(123)--> number
    // 2.javascript模式 58页
    // 3.javascript权威指南 32 - 200页
    // 数组去重
    // var arr = [1, 3, 2, 4, 4, 4, 5, 12, 20, 5, undefined, undefined];
    // // Array.prototype.unique = function () {
    
    // arr.sort(function(a, b){
    //          return a - b;
    // });
    // }
    
    // 第一题
    // function type(target){
    // if(target = null || undefined){
    //  if(typeof(target) == undefined){
    //      return undefined;
    //  }else{
    //      return null;
    //  }
    // } else {
    //  if(target.constructor == function Object() { [native code] }){
    //      return 'Object';
    //  }else if(target.constructor == function Array() { [native code] }){
    //      return 'Array';
    //  }else if(target.constructor == function Number() { [native code] }){
    //      return 'Number';
    //  }else if(target.constructor == function Boolean() { [native code] }){
    //      return 'Boolean';
    //  }
    // }
    
    // type(123);     function Object() { [native code] }
    // type('123');function String() { [native code] }
    // type({});   function Object() { [native code] }
    // type([]);   function Array() { [native code] }
    // type(true); function Boolean() { [native code] }
    // type(undefined);无constructor
    // type(null);无constructor
    // js六大数据类型:number、string、object、Boolean、null、undefined
    // console.log(typeof(undefined));
    
    // 第二题数组去重
    // function deleteAgain(target){
    //      target.sort(function (a, b){//排序
    //          return a - b;
    //      })
    //      for(var i = 0; i < target.arguments, i ++){
    //          if(target[i] = target[i + 1]){
    //              target.slice(i, 1);
    //          }
    //      }
    //      return target;
    // }
    // deleteAgain(arr);
    
    // arr.sort(function (a, b){//排序
    //          return a - b;
    //      })                       // 能运行通过
    
    // function deleteAgain(target){
    //      target.sort(function (a, b){//排序
    //          return a - b;
    //      })
    // }
    // deleteAgain(arr);             // 能通过
    

    lesson16

    // "use strict";//字符串不报错
    // var a = 'hello world!!!';
    // console.log(a);
    // Object.prototype.toString.call();//-->[object, null]
    // var a = [1, 2, 5, 3, 3, 2, 1, 5];
    // Array.prototype.unque = function(){
    //  var obj = {};
    //  var arr = [];
    //  var len = this.length;
    //  if(!obj[this[i]]){
    //      obj[this[i]] = "123";
    //      arr.push(this[i]);
    //  }
    //  return arr
    // }
    
    // 类数组 的核心是length
    // var obj = {
    //  "0" : 
    // }
    
    // function Person(){
    
    // }
    // console.log(Person.callee);
    // try {
    
    // } catch (e){
    
    // }
    // with(){}
    
    
    //*****课后习题****
    //1. // type判断类型
    // function type(target){
    //  //typeof 可以判断的类型 undefined boolean number function string   
    //  //       不能判断的类型 null  object  array  包装类 -->object
    //  if(target === null){
    //  return null;
    // }
    // var strTemple = typeof(target);
    // var toStr = Object.prototype.toString;
    //  if(strTemple == 'object'){
    //      switch (toStr.call(target)){
    //          case "[object Array]":
    //              return 'array';
    //          case "[object Object]":
    //              return 'object';
    //          case "[object Number]":
    //              return 'object--Number';
    //          case "[object String]":
    //              return 'object--String';
    //          case "[object Boolean]":
    //              return 'object--Boolean';
    //      }
    //  }else{
    //      return strTemple;
    //  }
    // }
    //2. //数组去重
    // var arr = ['a', 'a', 'b', 'b', undefined, undefined, 0, 0];
    // Array.prototype.unique = function (){
    //   var obj = {};
    //   var arr = [];
    //   var len = this.length;
    //   for(var i = 0; i < len; i ++){
    //      if(!obj[this[i]]){
    //          obj[this[i]] = 'temple';
    //          arr.push(this[i]);
    //      }
    //   }
    //   return arr;
    // } 
    
    
    //正式课程部分
    // 类数组
    // function test(){
    //  console.log(arguments)
    //  console.log(arguments.length);
    //  console.log(push(1));//没有这个方法
    // }
    // test(1,2,3,4);
    
    
    // var obj = { 
    //  "0" : 'a',
    //  "1" : 'b',
    //  "2" : 'c',
    //  "length" : 3,
    //  "push" : Array.prototype.push
    // } 
    
    // obj.push(123);
    // Array.prototype.push = function(target){
    //  this[this.length] = target;
    //  this.length ++
    // }
    
    // 阿里笔试题
    // var obj = {
    //  "1" : 'a',
    //  "2" : 'b',
    //  "length" : 4,
    //  "push" : Array.prototype.push,
    //  "splice" : Array.prototype.splice
    // }
    // obj.push('c');
    // obj.push('d');
    // 结果
    // obj = {
    //  "1" : 'a',
    //  "2" : 'b',
    //  "4" : 'c',
    //  "5" : 'd',
    //  "length" : 6,
    // }
    
    // 报错调试
    
    // try...catch(try只能捕捉逻辑错误不能捕捉语法解析错误)
    // try{
    //  // console.log('a');
    //  console.log(a);
    // }catch(e){
    //  // console.log('b');
    //  console.log(e.name + " :" + e.message);
    // }finally{}
    // console.log('next');
    
    // EvalError
    
    // RefereenceError  非法或不能识别的引用数值
    
    // SyntaxError  语法解析错误
    
    // TypeError  操作数类型错误
    
    // ecmascript  -->  es   es5.0  es3.0  es6.0
    // es5严格模式
    
    // function demo(){
    //  console.log(arguments.callee);
    // }
    // demo();
    // function test(){
    //  "use strict"  //局部严格模式
    //  console.log(arguments.callee);
    // }
    // test();
    
    // with它能够改变作用域链
    
    // Dom操作
    // var div = document.getElementsByTagName('div');
    // var target = document.getElementsByClassName('target');
    
    // var demo = document.getElementById('demo');
    // var speed = 0.5;
    // setInterval(function(){
    //  speed += speed / 7;
    //  demo.style.left = parseInt(demo.style.left) + speed + 'px';
    //  demo.style.top = parseInt(demo.style.top) + speed +'px';
    // },100);
    
    

    16.DOM部分(增删改查)

    "use strict"
    // console.log('q');
    // Document Object Model
    // dom 查
    // var div = document.getElementsByTagName('div');
    // var div = document.getElementById('only');
    // var div = document.querySelector('.warrper span');
    // var div = document.getElementByName('div')[0];
    
    // w3c标准 IE9一下不兼容
    // 节点的四个属性
    // nodeName 只读
    // nodeValue 可读可写
    // nodeType 
    // attributes 节点行间属性
    
    // function test(){
    //  console.log(arguments.callee)
    // }
    // test();
    // console.log(Object.prototype.caller(test));
    
    
    // 笔记部分
    // Document Object Model 文档对象模型
    // DOM定义了表示和修改文档所需的对象、
    // 这些对象的行为和属性以及这些对象之间的关系。
    // DOM对象即为宿主对象,由浏览器厂商定义,
    // 用来操作html和css功能的一类对象的集合。
    // 也有人称DOM是对HTML以及XML的标准编程接口。
    
    // 查
    // var div = document.getElementById('only');
    // 注意点在IE8一下,不区分ID的大小写,且返回匹配name属性的元素
    
    // var div = getElementsByTagName('div')[0];通过标签名选择(*表示全选)   实时的选择
    // var div = document.getElementsByClassName('');IE8及IE8一下无法使用
    // var div = document.getElementsByName();但只能用于form img ifrome
    // .remove();表示销毁
    
    // var span = document.querySelector('.warrper > .content span');  >  表示直接子元素选择器  非实时修改
    // var span = document.querySelectorAll('.warrper > content span')IE7及IE7以下没有
    
    // node 节点; tag 标签; Element 元素
    // 遍历节点树
    // var Strong = getElementsByTagName('strong');
    // 打印台  Strong.parentNode  顶层为document    Strong.childNodes
    // 节点的类型:元素节点--1 属性节点--2 文本节点--3 注释节点--8 document--9 DocumentFragment--11 不能跨级访问
    
    // div.firstChild div.lastChild
    // css文本类属性,可以继承
    
    // div.nextSibling 下一个兄弟节点   div.previousSibling 前一个兄弟节点
    
    // 基于元素节点树的遍历
    // parentElement返回当前父元素节点   顶层是html
    // children只返回当前元素的元素子节点
    // childElementCount 返回子元素的个数
    // firstElementChild返回的是第一个元素子节点
    // lastElementChild返回的是最后一个元素子节点
    
    // 节点的四个属性:
       // 节点的标签名:nodeName  只读不可写
       // 节点的内容:nodeValue  可读可写(text comment)
       // 获取节点的类型 nodeType  返回值为一个数字
       // 一个节点行间所有属性的集合,是类数组:attributes
    
    
    // DOM结构树
    
    //           |Document      ——  |HTMLDocument  
    //                                             |HTMLHeadElement
    //                              |Text          |HTMLBodyElement 
    //           |CharacterData ——  |Comment       |HTMLTitleElement
    // Node                                        |HTMLParagraphElement
    //                                             |HTMLInputElement
    //           |Element       ——  HTMLElement  ——|HTMLTableElement       
    //                                             |.....etc.
              
    //           |Attr
    // getElementById方法定义在Document.prototype上,即Element节点上不能使用
    // getElementsByName方法定义在HTMLDocument.prototype上
    // getElementsByTagName方法定义在Document.prototype以及Element.prototype
    
    // document.body = body
    // document.head = head
    // document.documentElement = html
    
    // 作业:
    //      1.遍历元素节点树(在原型链上编程)
    
    //      2.封装函数,返回元素e的第n层祖先元素节点
    // function retParent(e, n){
    //  while(e && n){
    //      e = e.parentNode;
    //      n --;
    //  }
    //  return e;
    // }
    // var em = document.getElementsByTagName('em')[0];
    
    //      3.封装函数,返回元素e的第n个兄弟元素节点,n为正,返回后面的兄弟元素节点,n为负返回前面的,n为0,返回自己。(要兼容全部浏览器)
    // function retSibling(e, n){
    //  while(e && n){
    //      if(n > 0){
    //          if(e.nextElementSibling){
    //              e = e.nextElementSibling;   
    //          }else{
    //              for(e = e.nextSibling; e && e.nodeType != 1;e = e.nextSibling);
    
    //          }
                
    //          n --;
    //      }else{
    //          if(e.previousElementSibling){
    //              e = e.previousSibling;
    //          }else{
    //              for(e = e.previousSibling; e && e.nodeType != 1;e = e.previousSibling);
    //          }
    //          n ++;
    //      }
    //  }
    //  return e;
    // }
    // em = document.getElementsByTagName('em')[0];
    
    //      4.编辑函数,封装myChildren功能,解决以前部分浏览器的兼容性问题
    // function hasChildren(){
    //  var div = document.getElementsByTagName('div')[0];
    //  var child = div.childNodes;
    //  var arr = [];
    //  var len = child.length;
    //  for(var i = 0; i < len; i ++){
    //      if(child[i].nodeType == 1){
    //          arr.push(child[i]);
    //      }
    //  }
    //  return arr;
    // }
    // hasChildren();
    
    //      5.自己封装hasChildren()方法,不可用children属性
    // Element.prototype.hasChildren = function(){
    //  var child = this.childNodes,
    //      len = child.length;
    //  for(var i = 0; i < len; i ++){
    //      if(child[i].nodeType == 1){
    //          return true;
    //      }
    //  }
    //  return false;
    // }
    // var div = document.getElementsByTagName('div');
    

    lesson18

    'use strict'
    // 创建节点
    // var div = document.createElement('div');
    // var text = document.createTextNode('dadad');
    // var comment = document.createComment('this is ');
    // 插入节点
    // document.body.appendChild(div); 插入到最后面
    // document.body.insertBefore(a, b) 插入a 在b 之前,  有剪切的功能
    // 删除节点
    // div,removeChild(text); 剪切 子节点
    // div.remove();  自毁
    // 替换节点
    // parentNode.replaceChild(newChild, originChild);  也是剪切
    
    // 元素节点操作(操作台)
    // div.innerHTML = ''   能读能写(多用于改值)
    // div.innerText        能读能写(多用于取值)
    
    // 请编写一段JavaScript脚本生成下面这段DOM结构。要求:使用标准的DOM方法或属性。
    // <div class="example">
        // <p class="slogan">姬成,你最帅!</p>
    // </div>
    // var div = document.createElement('div');
    // var p = document.createElement('p');
    // var text = document.createTextNode('成哥,帅');
    // p.appendChild(text);
    // div.appendChild(p);
    // document.body.appendChild(div);
    // div.className = 'example';
    // p.setAttribute('class','slogan');
    
    // 作业
    // 1.封装函数insertAfter();功能类似insertBefore();
    Element.prototype.insertAfter = function(origin, target){
        var nextDom = target.nextElementSibling;
        var parentDom = this;
        if(!nextDom){
            parentDom.appendChild(origin);
        }else{
            parentDom.insertBefore(origin, nextDom);
            }
    }
        
    // 2.将目标节点内部的节点顺序倒置
    // 3.怎么将红色的小方框动起来
    

    lesson19

    'use strict'
    // 插入一个Dom在一个元素的后面即定义一个insertAfter()方法
    // var oWrapper = document.getElementById('wrapper');
    // // oWrapper.insertBefore(contentb,contenta);
    // Element.prototype.insertAfter = function(origin, target){
    //  var nextDom = target.nextElementSibling;
    //  var parentDom = this;
    //  if(!nextDom){
    //      parentDom.appendChild(origin);
    //  }else{
    //      parentDom.insertBefore(origin, nextDom);
    //  }
    // }
    // oWrapper.insertAfter(contentb, contentc);
    
    // 创造一个remove()方法可以自己销毁自己
    // Element.prototype.remove =function(){
    //  return this.parentNode.removeChild(this);
    // }
    // var oContenta = contenta.remove();
    
    // 将目标元素逆序输出
    // Element.prototype.reverseDom = function(){
    //  var arr = Array.prototype.slice.call( this.children).reverse();
    //  this.innerHTML = '';
    //  console.log(arr);
    //  for(var i = 0; i < arr.length; i ++){
    //      this.appendChild(arr[i]);
    //  }
    
    // }
    // wrapper.reverseDom();
    
    // 数组方法: forEach map filter reduce reduceRight
        // var arr = [{name: "鹿晗", flowers: 99959, sex: "male"},
     //     {name: "黄子韬", flowers: 66656, sex: "male"},
     //     {name: "吴彦祖", flowers: 22256,sex: "male"  },
     //     {name: "赵丽颖", flowers: 65446, sex: "female"},
     //     {name: "宋茜", flowers: 45659, sex: "female"},
     //     {name: "黄磊", flowers: 88888, sex: "male" },
     //     {name: "赵薇", flowers: 64561, sex: "female"},
     //     {name: "杨幂", flowers: 16115, sex: "female"}]
    
    // // 1.把所有男星选出来
    //  // arr.filter(function(ele, index){
    //  //  return ele.sex == "male";
    //  // })
    // // 2.根据flowers排序
    //  var orderArr = arr.filter(function(ele, index){
    //      return ele.sex == "male";
    //  }).sort(function(a, b){
    //      return a.flowers - b.flowers;
    //  });
    // // 3.添加Dom
    //  orderArr.forEach(function(ele, index){
    //      var oLi = document.createElement('li');
    //      oLi.innerText = ele.name + 'flowers' + ele.flowers
    //      demo.appendChild(oLi);
    //  });
    
    // arr.forEach(function(ele, index){
    //  console.log(ele, index);
    // })
    
    // map 
    // Array.prototype.map = function(func){
    //  var arr = this;
    //  var newArr = [];
    //  for(var i = 0; i < arr.length; i ++){
    //      newArr.push(func(arr[i], index));
    //  }
    //  return newArr;
    // }
    
    // arr.map(function(ele, index){
    //  console.log(ele, index);
    //  ele.componey = 'cst'
    //  return ele;
    // })
    
    // filter 过滤
    // Array.prototype.filter = function(func){
    //  var arr = this;
    //  var newArr = [];
    //  for(var i = 0, i < arr.length, i++){
    //      if(func(arr[i], i)){
    //          newArr.push(arr[i]);
    //      }
    //  }
    //  return newArr;
    // }
    // console.log(arr.filter(function (ele, index){
    //  if(ele.sex == 'male'){
    //      return true;
    //  }else{
    //      return false;
    //  }
    // }));
    
    // var oDate = new Date();
    // oDate.getTime();
    
    // 计时器
    // setTimeout(function(){
    //  alert('辉帅')
    // }, 3000);
    // setInterval(function(){
    //  console.log('辉哥帅');
    // },3000);
    
    // var flag = true;
    // setTimeout(function(){
    //  flag = false;
    // }, 2000)
    // clearInterval()
    

    17.setInterval和setTimeout

    // // 定时器
    // setInterval(function(){
    //  console.log('a');
    // },1000)
    // 两个参数,先等1000毫秒
    
    // setTimeout(function(){
    //  console.log('a');
    // },1000)
    // 延迟执行
    
    // var count = 0;
    // var timer = setInterval(function(){
    //  console.log('a');
    // },1000)
    // clearInterval(timer)
    // clearTimeout(timer)
    // 它们都是window属性  this指向windows
    
    // 计时器  三分钟
    // var minute = document.getElementsByTagName('input')[0];
    // var second = document.getElementsByTagName('input')[1];
    // var minuteCount = 0;
    // var secondCount = 0;
    // var timer = setInterval(function(){
    //  secondCount ++;
    //  if(secondCount == 59){
    //      minuteCount ++;
    //      second = 0;
    //  }
    //  minute.value = minuteCount;
    //  second.value = secondCount;
    //  if(minuteCount == 3){
    //      clearInterval(timer);
    //  }
    // },1000)
    
    // 查看滚动条位置(w3c标准   IE8及以下IE8以下不兼容)
    // window.pageXOffset
    // window.pageYOffset
    // document.body.scrollLeft + document.documentElement.scrollLeft( IE8及以下IE8)
    
    // 查看滚动条的方法
    // function getScrollOffset(){
    //  if(window.pageXOffset){
    //      return{
    //          x : window.pageXOffset,
    //          y : window.pageYOffset  
    //      }
    //  }else{
    //      return{
    //          x : document.body.scrollLeft + document.documentElement.scrollLeft
    //          y : document.body.scrollTop + document.documentElement.scrollTop
    //      }
            
    //  }   
    // }
    
    // 查看可视化窗口的尺寸
    // window.innerWidth
    // window.innerHeight
    
    // 混杂模式能兼容之前的标准(向后兼容)
    // function getViewportOffset(){
    //  if(window.innerWidth){
    //      return{
    //          w : window.innerWidth,
    //          h : window.innerHeight
    //      }
    //  }else if(document.compatMode == "CSS1Compat"){
    //      return{
    //          w : document.documentElement.clienWidth,
    //          h : document.documentElement.clienHeight
    //      }
    //  }else{
    //      return{
    //          w : document.body.clienWidth,
    //          h : document.body.clienHeight
    //      }
    //  }
    // }
    // DTD文档类型声明
    // document.compatMode可以判断是不是混杂模式
    
    // 查看元素的几何尺寸
    // getBoundingClientRect(); 返回一个对象    兼容性很好
    // 返回的结果不是实时的
    // offsetWidth  offsetHeight
    // offsetLeft   offsetTop
    // offsetParent   找它的父级
    
    // 滚动条移动 window.scroll(x, y)   y是定位
    //            window.scrollBy(x, y) y是累价值
    
    // 脚本化CSS
    // div.style
    // window.getComputedStyle(div, false) 获取的都是绝对值   获取的是展示出来的样式
    // 获取属性方法
    // function getStyle(elem, prop){
    //  if(window.getComputedStyle){
    //      return window.getComputedStyle(elem, false)[prop];
    //  }else{
    //      return elem.currentStyle[prop];
    //  }
    // }
    
    // 作业:1.求出其相对文档的定位坐标getElementPostion
    //      2.轮播图
    

    18.事件

    'use strict'
    
    // 事件
    // 举个例子
    // demo.onclick = function(){
    //  alert('跪下')
    // }
    
    // 背景变色
    // var times = 1;
    // demo.onclick = function(){
    //  if(times ++ % 2 !== 0){
    //      demo.style.backgroundColor = 'red';
    //  }else{
    //      demo.style.backgroundColor = 'orange';
    //  }
    // }
    
    // demo.onmouseenter = function(){
    //  demo.style.backgroundColor = 'red';
    // }
    // demo.onmouseleave = function(){
    //  demo.style.backgroundColor = "orange";
    // }
    
    // 1.绑定事件(对象.的方式会产生覆盖,但w3c标准不可以)
    // 给div绑定鼠标点击事件 让它对点击这种事件可以进行处理, 执行绑定事件
    
    // addEventListener(w3c标准方法,不会覆盖但如果绑定相同的函数时,就只执行一次)
    // demo.addEventListener('click', function(){ //匿名函数
    //  alert('帅')
    // }, false);
    
    // [] !== [] {}!=={} function(){} !==function(){}
    
    // demo.onclick =function(){
    //  alert('帅')
    //  demo.onclick = null;//撤销
    // }
    
    // IE8以前  attachEvent();
    // demo.attachEvent('onclick', test);  // 如果test不同就会依次执行,不会省略
    
    // 绑定事件的兼容方法
    // function addEvent(dom, type, handle){
    //  if(dom.addEventListener){
    //      dom.addEventListener(type, handle, false);
    //  }else if(dom.attachEvent){ //detachEvent()
    //      function temp(){
    //          handle.call(dom);
    //      }
    //      temp.name = handle;
    //      dom[type] = [].push(temp);
    //      dom.attachEvent('on' + type, temp);
    //  }else{
    //      dom['on' + type] = handle;
    //  }
    // };
    // addEvent(demo, type, handle)
    
    // 取消默认事件   ele.onclick
    // function removeEvent(dom, type, handle){
    //  if(dom.removeEventListener){
    //      dom.removeEventListener(type, handle, false);
    //  }else if (dom.detachEvent){
    //      for(var i = 0; i < dom.click.length; i++){
    //          if(dom.click[i].name === handle){
    //              dom.detachEvent('on' + type, dom.click[i]);
    //          }
    //      }
    //  }else{
    //      dom.['on' + type] = null;
    //  }
    // }
    // removeEvent(demo, 'click', testCst)
    
    // 事件处理模型    事件冒泡,事件捕获
    // 事件冒泡
    // oD.addEventListener('click', function(){
    //  console.log('oD bubble');
    // },false);
    // oC.addEventListener('click', function(){
    //  console.log('oC bubble');
    // },false);
    // oB.addEventListener('click', function(){
    //  console.log('oB bubble');
    // },false);
    // document.addEventListener('click',function(){
    //  console.log('document bubble');
    // },false);
    // // 事件捕获
    // oD.addEventListener('click', function(){
    //  console.log('oD catch');
    // },true);
    // oC.addEventListener('click', function(){
    //  console.log('oC catch');
    // },true);
    // oB.addEventListener('click', function(){
    //  console.log('oB catch' );
    // },true);
    // document.addEventListener('click',function(){
    //  console.log('document catch');
    // },true);
    // 结论对于整个模型来说事件都是先捕获后冒泡
    // 然而对于事件源来说那个事件先注册,哪个事件先执行
    // focus(聚焦input外面不可能有input,所以没有必要冒泡), blur, change, submit, reset, select等事件不冒泡
    // 作业:女星排行榜(没做)
    

    lesson22

    'use strict'
    oWrapper.onclick = function(){
        alert('wrapper');
    }
    oContent.onclick = function(){
        alert('content');
        // window.location.href = 'https://www.baidu.com';
        window.location.href = oContent.getAttribute('href');
    
    }
    oBox.onclick = function(e){
        alert('box');
        // e.stopPropagation(); //w3c标准阻止冒泡的方法 
        // e.cancelBubble = true;  IE8以下版本浏览器
        // return false;
    }
    
    // 阻止默认事件
    
    var a = document.getElementsByTagName('a')[0];
    console.log(a.getAttribute('href'));
    

    19.运算符和条件语句

    比较运算符:
        1.通过比较得出结果为布尔值,侧重结果;
        2.赋值符号==;
        3.不等于!=;
        3.'a'<'b'=true;
        4.0-127 ASCI  0-255  ASCII unicode(万国码)
          65  A  66  B   97a   98b。
        5.‘10’  <‘2’=true(字符串的值作比较);
        6.undifined=null!=0;
        7.被认定为false的值 undefined,null,NaN,"",0,false。
        8.逻辑运算$$ || !
        9.与运算&&  : 如果第一位计算结果为真,那么计算第二个表达式的结果,
        并且返回第二个表达式的结果,如果第一位计算结果为假,那么返回第一个表达式的运算结果
        10.短路语句(举例1>2&&document.write('举案说法你看得见'))。
        11.或运算 ||  如果第一个表达式计算结果为真,那么直接返回第一个表达式运算结果,
        如果第一个表达式运算结果为假,那么计算第二个表达式,并将第二个表达式的运算结果返回。
        12.e:后需要用到这个E,在IE下,E没有值,但有window.event在goole chrome下有值,
        或运算符会多用于兼容性的写法。
        13.!:把后面的值,先转换成布尔值,然后再取反。
        14.if( 条件){ 如果条件成立执行这里面的语句  }else{ 不成立则执行这里面的语句}
        15.互联网公司0-100分划分(H1B工作签证 60W-20W)
            90-100 (蚂蚁金服) alibaba microsoft facebook goole
            80-90  tencent toutiao 美团 网易
            70-80  百度 携程 小米 新浪(渣浪) 58同城
            60-70  蘑菇街 去哪网
            60以下 怎么可能
            
            var score = parseInt( window.prompt('input'));
            if(score>90&&score<=100){
            document.write('alibaba');
            }
            if(score>80&&score<=90){
            document.write('tencent')
            }
            if(score>70&&score<=80){
            document.write('新浪')
            }
            if(score>60&&score<=70){
            document.write('蘑菇街')
            }
            if(score<=60){
            document.write('shit!!!');
            }
        16.为了使语句互斥用else if(必须条件互斥)
            var score = parseInt( window.prompt('input'));
            if(score>90&&score<=100){
            document.write('alibaba');
            }
            else if(score>80&&score<=90){
            document.write('tencent')
            }
            else if(score>70&&score<=80){
            document.write('新浪')
            }
            else if(score>60&&score<=70){
            document.write('蘑菇街')
            }
            else if(score<=60){
            document.write('shit!!!');
            }
            else{
            document.write('error');
            }
        17.当短路语句不在关注返回结果时,就可以用短路语句代替if语句
        18.输入三个数,判断大小并输出
            var a = parseInt(window.prompt('input'));
            var b = parseInt(window.prompt('input'));
            var c = parseInt(window.prompt('input'));
            if(a>b) {
                if(a>c){
                    document.write(a);
                }else{ 
                    document.write(c);
                    }
                }else{
            if(b>c){
                    document.write(b);
                }else{
                    document.write(c);
                }
            }
        19.for循环
        真正的for循环我们关注的是顺序
        for( 1;2 ;3){4}
        首先执行1
        然后判断2是否成立-->判断2结果是否为true    
        然后执行4
        然后执行3
        然后判断2是否成立-->判断2结果是否为true
        当2的结果为false时停止循环
        例子:
        for(i=0;i<100;i++){
        document.write(i+' ')
         }
        var i=100;
         for(;i--;){
        document.write(i+" ")
         }
        for(var i=0;i<100;i++){
        if(i%2!=0&&i%3!=0){
            document.write(i+" ")
        }
        } var count=0;
        for(var i=0;i<1000;i++){
        count+=i;
        if(count>=200){
            document.write(i);
            i=2000;
        }
        }
    

    20.正则

    'use strict'
    // console.log('a');
    /*********************封装函数************************/
    // Document.prototype.getByClassName = function(className){
    //  var allDomArr = Array.prototype.slice.call(document.getElementsByTagName('*'),0);
    //  // console.log(allDomArr);
    //  var filterArr = [];
    //  function dealClassName(dom){
    //      var reg = /\s+/g;
    //      var itemArr = dom.className.replace(reg, ' ').trim().split(' ');
    //      return itemArr;
    //  }
    //  allDomArr.forEach(function (ele, index) {
    //      var itemArr = dealClassName(ele);
    //      for(var i = 0; i < itemArr.length; i++) { 
    //          if(className == itemArr[i]){
    //              filterArr.push(ele);
    //              break;
    //          }
    //      }
    //  })
    //  return filterArr;
    // }
    // console.log(document.getByClassName('demo'));
    
    /********************ajax****************/
    // form:
        // method: get, post
        // action: 服务器地址
        // enctype: application/x-www-form-urlencoded(默认值)(表示文件发送前编码成字符格式)multipart/form-data(把文件变成文件上传表单)
    // ajax技术能局部获取数据,还不刷新页面、且异步获取数据
    
    // new XMLHttpRequest()可以创建ajax对象但IE不认识
    // newa ActiveXObject('Microsoft.XMLHTTP')主流浏览器创建ajax文档
    /*****************兼容性写法**************************/
    // 流程:
    //  1.手机/电脑                             
    //  2.app
    //  3.商家 商品 地址
    //  4.提交订单 交钱
    //  5.监控 物流信息
    //  6.拿到餐 处理掉
    
    //  1.浏览器
    //  2.Ajax对象
    //  3.open('GEt', 'URL','true');
    //  4.send('data');
    //  5.onreadystatechange readyState==4//readyState有四个值(0::未初始化,1:读取中, 2::已读取, 3:交互中, 4::完成status =(404 : 文件没找到,用户端错误,200:成功, 500 :服务器内部错误, 303 : 服务器错误
    //  6.callback
    
    // var xml = null;
    // if(window.XMLHttpRequest{
    //  xml = new XMLHttpRequest();
    // }else{
    //  xml = new ActiveXObject('Microsoft.XMLHTTP');
    // }
    // xml.open('GET', 'getNews.php', true);
    // xml.send();
    // xml.onreadystatechange = function(){
    //  if(xml.readyState == 4){
    //      if(xml.status == 200){
    //          console.log('3333');
    //      }
    //  }
    // }
    function Ajax(method, url, flag, data, callback){
        var app = null;
        if(window.XMLHttpRequest){
            app = new window.XMLHttpRequest();
        }else{
            app = new window.ActiveXObject('Microsoft.XMLHTTP');
        }
        method = method.toUpperCase();
        if(method === 'GET'){
            app.open(method, url + '?' + data, flag);
            app.send();
        }else if (method === 'POST'){
            app.open(method, url, flag);
            app.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
            app.send(data);
        }
        app.onreadystatechange = function(){
            if(app.readyState === 4){
                if(app.status === 200){
                    callback(app.responseText);
                }else{
                    alert('error');
                }
            }
        }
    }
    
    /*************************************************/
    // var aaa = 'username=aimee&age=18';
    // function ajax(method, url, flag, data, callback) {
    //     var xml = null;
    //     if(window.XMLHttpRequest){
    //         xml = new XMLHttpRequest();
    //     }else {
    //         xml = new ActiveXObject('Microsoft.XMLHTTP');
    //     }
    //     if(method == 'GET') {
    //         xml.open(method, url + '?' + data, flag);
    //         xml.send();
    //     }else if(method == 'POST') {
    //         xml.open(method, url, flag);
    //         xml.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    //         xml.send(data);
    //     }
    //     xml.onreadystatechange = function () {
    //         if(xml.readyState == 4) {
    //             if(xml.status == 200) {
    //                 callback(xml.responseText);
    //             }
    //         }
    //     }
    // }
    // function showData(data) {
    //     console.log(data)
    // }
    // function alertData(data) {
    //     alert(data);
    // }
    
    // ajax('GET', 'post.php', true, aaa, alertData); 
    

    21.CSS3媒体查询

    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>meitichaxun</title>
        <style type="text/css">
            .content{
                display: flex;
                flex-wrap: wrap;
                width: 100%;
    
            }
            .content .time{
                display: inline-block;
                flex-grow: 1;
                width: 20%;
    
            }
            .content .time img{
                width: 100%;
            }
            @media screen and (max-width: 180px){
                .content .time{
                    display: inline-block;
                    width: 100%;
                }
            }
        /*  @media screen and (min-width: 180px) and (max-width: 370px){
                .content .time{
                    display: inline-block;
                    width: 50%;
                }
            }*/
    /*      @media screen and (min-width: 370px) and (max-width: 540px){
                .content .time{
                    display: inline-block;
                    width: 33.33%;
                }
            }*/
        /*  @media screen and (min-width: 540px) and (max-width: 800px){
                .content .time{
                    display: inline-block;
                    width: 25%;
                }
            }*/
        /*  @media screen and (min-width: 800px) and (max-width: 1190px){
                .content .time{
                    display: inline-block;
                    width: 20%;
                }
            }*/
            /* @media screen and (orientation: portrait){  竖屏
                .content div{
                    width: 50px;
                    height: 50px;
                    background: red;
                }
            }
            @media screen and (orientation: landscape){  横屏
                .content div{
                    width:60px;
                    height: 60px;
                    background: orange;
                }
            } */
            /* .wrapper{
                position: relative;
                perspective: 1200px;
                perspective-origin: 50% 50%;
                top: 110px;
                left: 110px;
                height: 233px;
                width: 233px;
            }
            .wrapper .item{
                transform-style: preserve-3d;
                width: 100px;
                height: 100px;
                background: orange;
                transform: translateZ(0px);
            } */
        </style>
    
    </head>
    <body>
        <div class="content">
            <!-- <div></div> -->
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
            <div class="time"><img src="4  白凤.jpg" alt=""></div>
        </div>
        <!-- box-shadow影响性能 -->
        <!-- <div class="wrapper">
            <div class="item">A</div>
        </div> -->
    </body>
    </html>
    

    行、块级元素

    <!-- ============================================ -->
      <!-- =================  块属性  ================== -->
      <!-- ============================================ -->
      <!-- <div>、<p>、<h1>…<h6>、<ol>、<ul>、<li>、<address>、<blockquote>、<form> -->
      <!--
        1.每一个快属性标签都是从新的一行开始,而且之后的元素也都会从新的一行开始
        (因为每一个块属性标签都会直接占据一整行的内容,导致下面的内容也只能从新的一行开始)
        2.块属性标签都是可以设置宽度、高度,行高,距顶部距离,距底部距离
        3.块属性标签的宽度假如不做设置,会直接默认为父元素宽度的100%
        4.块属性标签是可以直接嵌套的
        5.p标签中不能嵌套div标签
      -->
      <!-- ============================================ -->
      <!-- =================  行属性  ================== -->
      <!-- ============================================ -->
      <!--
        <a>、<span>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>等
      -->
      <!--
        1.行属性标签它和其它标签处在同一行内
        2.行属性标签无法设置宽度,高度 行高 距顶部距离 距底部距离
        3.行属性标签的宽度是直接由内部的文字或者图片等内容撑开的
        4.行属性标签内部不能嵌套行属性标签(a链接内不能嵌套其他链接)
      -->
    

    笔试题

    
    
    1、inline:<span></span>,<strong></strong>,<em></em>,<a></a>,<del></del>
     block:<p></p>,<ol></ol>,<li></li>,<ul></ul>,<div></div>,<form></form>,<adress></adress><table></table><h1-6>;
    行内元素转化为块级元素:display : block;
    
    
    2、css代码三中引入方式:
        行间样式
        页面级css
        引入css文件 link
        style标签下写 @import url();
    
    3、web标准:行为、样式、结构相分离
    
    4、简化代码:
    <style type="text/css">
        *{
            margin: 0 10px;
            padding: 0;
        }
    
        #content{
            background:#ffffff;
        }
        #content div{
            font-size: 14px;
            text-align: center;
            color: #e9e9e9;
        }
        #nav{
            background-color: #e0e0e0;
        }
    
    5、浏览器中margin默认值为8px;
    
    6、
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>liangxi</title>
        <style>
        body{
            padding: 0;
            margin: 0;
        }
        #my-defined{
            width: 100px;
            height: 100px;
            padding: 0 100px;
            margin: 10px 20px 30px 40px;
            border: 1px solid orange;
            background: orange;
        }
    </style>
    </head>
    <body>
        <div id="my-defined"></div>
    </body>
    </html>
    html中orange颜色的区域宽度是302px
    orange区域距离页面左边40px,上10px
    
    7、用css、html编写一个两列布局的页面,要求右侧宽度为200px;左侧自动扩展。
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>liangxi</title>
        <style>
        .right{
            float: right;
            width: 200px;
            height: 100px;
            background:red; 
        }
        .left{
            height: 100px;
            margin-right: 200px;
            background: black;
        }
        </style>
    </head>
    <body>
        <div class="right"></div>
        <div class="left"></div>
    </body>
    </html>
    
    8、居中一个浮动元素:
    <style type="text/css">
        #my-defined{
            position: absolute;
            width: 300px;
            height: 500px;
            left: 50%;
            right: 50%;
            margin-left: -150px;
            margin-top: -250px;
        }
    </style>
    
    
    9、画出下图示意图:
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>liangxi</title>
        <style>
            #page{
                width: 520px;
            }
            .nav{
                width:200px;
                float: right;
                background: orange;
            }
            .main{
                width: 200px;
                float: left;
                padding-left: 110px;
                background: black;
            }
            .sub{
                width: 100px;
                float: left;
                margin:10px 0 10px -100px;
            }
            .nav,.sub{
                border: 10px deshed #000;
                height: 300px;
                background: orange;
    
            }
            .sub{
                height: 280px;
            }
        </style>
    </head>
    <body>
        <div id="page">
            <div class="main"><div class="sub"></div></div>
            <div class="nav"></div>
        </div>
    </body>
    </html>
    
    
    10、form表单中method属性值及其区别:
        (1)GET 使用URL 或Cookie 传参,而POST将数据,放在BODY中。
    
        (2)GET 的URL会有长度上的限制, POST可以传输很多数据。
    
        (3)POST比GET安全。
    
        但其实HTTP协议里没有规定POST数据就要放在BODY里, 也没有要求GET数据就一定要放在URL中而不能放在BODY中。
    
        HTTP协议对GET和POST 都没有对数据的长度进行限制,两方面原因造成数据限制的原因
    
        ①早起浏览器会对URL长度进行限制(浏览器URL输入框)
    
        ②浏览器会对Content-length进行限制,这是为了服务器安全和稳定。
    
    11、去掉ul>li结构中前面的圆点,并且解决li前面的空余、
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>liangxi</title>
        <style>
                ul {
                height: 100px;
                padding: 0;
                list-style: none;
                border: 1px solid black;
            }
        </style>
    </head>
    <body>
        <ul><li></li></ul>
    </body>
    </html>
    
    12、JavaScript中typeof可能返回的结果:12.Number,string,boolean,object,undefined,function;
    
    13、已知数组var arr = ["goole","microsoft","oracle","阿里","freewheel","IBM","爱立信","百度","企鹅","美团","去哪儿","58同城","新浪","搜狐","大众点评","360","汽车之家","巨人网络","携程","4399","凤凰网","人民网"],亲们,如果你想进前十的公司,请用效率最高的方法将此数组按照顺序链接成字符。
    <script type="text/javascript">
        var arr = ["goole","microsoft","oracle","阿里","freewheel","IBM","爱立信","百度","企鹅","美团","去哪儿","58同城","新浪","搜狐","大众点评","360","汽车之家","巨人网络","携程","4399","凤凰网","人民网"];
        console.log(arr.join(','));
    </script>
    
    
    14、写出html、css、JavaScript注释代码形式:
        html:<!--   -->
        css:/*   */
        js://
    
    15、编写一段JavaScript脚生成下面这段DOM结构。
    <div class="exmple">
        <p class="slogan">成哥,你最帅!</p>
    </div>
    <script type="text/javascript">
        var $Div = document.createElement('div');
        var $P = document.createElement('p');
        $Div.className = "exmple";
        $P.className = "slogan";
        $Div.appendChild($P);
        document.body.appendChild($div);
        $P.innerHTML = "成哥,你最帅!";
    </script>
    
    16、为html元素绑定一个事件,如点击事件。写出兼容各个浏览器的事件绑定方法。
    <script type="text/javascript">
        function addEvent(elem,type,handler){
        if(elem.addEventListener){
            elem.addEventListener(type,handler,false);
        }else if (elem.attachEvent) {
            elem['temp' + type + handler] = handler;
            elem[type + handler]= function (){
            elem['temp' + type + handler].call(elem);
            };
            elem.attachEvent('on' + type,elem[type + handler])
        }else{
            elem['on'+type]=handler;
        }
    }
    </script>
    
    
    17、Call,apply:作用都是改变this指向;
        区别:传参的方式不同,call直接传,apply利用数组的形式传参;
    
    
    18、封装ajax
    <script type="text/javascript">
    function ajax(method, url, flag, callback, data){
        var xhr = null;
         if(window.XMLHttpRequest){
            xhr = new window.XMLHttpRequest();
         }else{
            xhr = new ActiveXObject('Mirosoft.XMLHTTP')
         }
         if(method === 'GET'){
            xhr.open('GET', url + '?' + data, flag);
            xhr.send();
         }else if(method === 'POST'){
            xhr.open('POST', url, flag);
            xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
            xhr.send(data);
         }
         xhr.onreadystatechange = function (){
            if(xhr.readyState === 4){
                if(xhr.status === 200){
                    callback(xhr.responseText); 
                }
            }
        }
    
    }
    </script>
    
    19、数组去重 eg:var arr = ['a','b',234,23,'a','b',3,1,234]
    <script type="text/javascript">
        Array.prototype.unique = function () {
         var arr = [],
            obj = {},
            len = this.length;
            for(var i = 0;i < len;i++){
                if(!obj[this[i]]){
                    obj[this[i]] = "11";
                    arr.push(this[i]);
                }
            }
            return arr;
    }
    </script>
    
    
    20、如今有个ul,如果有十亿个li;要求点击li触发事件,弹出对应li的内容  
        <ul>
            <li></li>
        </ul>
    <script type="text/javascript">
    var oUl = document.getElementsByTagName('ul')[0];
    oUl.onclick = function  (e) {
        var event = e || window.event;
        var target = event.target || event.srcElement;
    
        console.log(target.innerHTML);
    }
    </script>
    
    
    21、阻止事件冒泡和事件默认时间
    <script type="text/javascript">
    //取消冒泡
    function stopBubble(e) {
       if(e.stopPropagation){
           e.stopPropagation();
       }else{
           e.cancelBubble = true;
       }
    }     
    
    //阻止默认事件
    function  cancelHandler(e){
        if(e.preventDefault){
              e.preventDefault();
        }else{
             e.returnValue = false;
        }
    }
    </script>
    
    22、什么是DOM:
    DOM是操作css,html的一套编程接口;
    DOM对象即为宿主对象,浏览器厂商定义的;
    DOM定义了表示和修改文档所需的方法。
    对html和xml编程借口不是css
    
    23、利用JavaScript取非行间样式,要求兼容性各个浏览器
    <script type="text/javascript">
        function getComputedStyle(obj,styleProp){
        if (window.getComputedStyle) {
            return window.getComputedStyle(obj,false)[styleProp];
        }else{
            return obj.currentStyle[styleProp];
        }
    }
    </script>
    
    
    24、运行test()和new test()的结果是什么:
    <script type="text/javascript">
        var a = 5;
        function test(){
            a=0;
            alert(a);
            alert(this.a);
            var a;
            alert(a);
        }
    </script>
    结果是:0 5 0    ,    0 undefined 0
    
    25、有字符串"aaaaabbbccccddddeeefgaa",转换为连续不重复的字符串
    <script type="text/javascript">
        var str = "aaaaabbbccccddddeeefgaa";
        var reg = /(.)\1*/g;
        console.log(str.replace(reg,"$1"));
    </script> 
    
    
    26、一串连续数字实现打点功能:100000000转换成:1.000.000.000
    <script type="text/javascript">
        var str = "1000000000";
        var reg = /(?=(\B)(\d{3})+$)/g;
        console.log(str.replace(reg,"."));
    </script>
    
    27、写出运算结果:
    <script type="text/javascript">
    alert(typeof(a))--undefined
    alert(typeof(undefined))--undefined
    alert(typeof(NaN))--number
    alert(typeof(null))--object
    
    var a = "123abc";
    alert(typeof(+a));--number
    alert(typeof(!!a));--boolean
    alert(typeof(a + ""));--string
    
    alert(1 == "1"); --true
    alert(NaN == NaN); --flase
    alert(NaN == undefined);--flase
    alert("11" + 11);--1111
    alert(1==="1")--flase
    alert(parseInt("123abc"))--123
    
    var num = 1232123.3456789;
    alert(num.toFixed(3));--1232123.346
    //toFixed只在number类型上可以用,保留几位有效数字,四舍五入
    
    // typeof(typeof(a))--string
    </script>
    
    28、打印当前年月时分秒
    <script type="text/javascript">
        var date = new Date();
      console.log(date.getFullYear + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日"+ date.getHours() + "时" + date.getMinutes() + "分" + date.getSeconds() + "秒");
    </script>
    
    29、css中,font-size设置的是字体的高;单位是px,em是相对值。
    
    30、有html结构:
        <div style="background-color:red;margin:0 0 100px 0;">123</div>
        <div style="background-color:red;margin:200px 0 0 0;">234</div>
        他们之间的间距是:200px
    
    31、简单说说自定义构造函数创建对象的原理:
        在函数的最前面隐式的加上 this = {};最后隐式的返回 return this;
    
    
    32、写出一种原型链实现继承的方式:圣杯模式
    <script type="text/javascript">
    
    var inherit =(function(){
    
      var F = function(){};
      return function(P,C){
        F.prototype = P.prototype;
        C.prototype = new F();
        C.prototype.constructor = C;
        C.prototype.uber = P.prototype;
      }
    
    }());
    </script>
    
    33、深度克隆:
    <script type="text/javascript">
        Array.prototype.deepClone = function (parent, child) {
             var child = {} || child;
             var toStr = Object.prototype.toString,
                 arrStr = '[object Array]';
             for(var prop in parent){
                if(parent.hasOwnProperty(prop)){
                    if(typeof(parent[prop]) === "object"){
                        child[prop] = (toStr.call(parent[prop]) === arrStr) ? []:
                        {};
                        deepClone(parent[prop], child[prop]);
                    }else{
                        child[prop] = parent[prop];
                    }
                }
             }
          }
    </script>
    
    34、描述预编译过程:
        (1)创建AO对象;
        (2)找形参和变量声明,将变量和形参作为AO对象的属性名,值为undefined;
        (3)将实参和形参相统一;
        (4)在函数体里找函数声明,将函数声明作为AO对象的属性名,将函数体作为赋值对象赋予函数名。
    
    35、介绍js语言特点:
        单线程;脚本语言;解释性语言,解释一行执行一行;ECMA标注;弱数据类型语言;可以跨平台;
    
    36、介绍主流浏览器以及他们相应的内核,介绍浏览器分为哪几部分,内核呢?
        浏览器分为:shell与内核(js引擎,渲染引擎,其他)
      主流浏览器:IE(trident);chrome(webkit/blink);safari(webkit);Firefox(Gecko);Opera(presto);
    
    37、简述js时间线的顺序:
        1、创建Document对象,开始解析web页面。document.readyState = 'loading'。
        2、遇到link外部css,创建线程加载,并继续解析文档。
        3、遇到script外部js,并且没有设置async、defer,浏览器加载,并阻塞,等待js加载完成并执行该脚本,然后继续解析文档。
        4、遇到script外部js,并且设置有async、defer,浏览器创建线程加载,并继续解析文档。对于async属性的脚本,脚本加载完成后立即执行。(异步禁止使用document.write())
        5、遇到img等,先正常解析dom结构,然后浏览器异步加载src,并继续解析文档。
        6、当文档解析完成,document.readyState = 'interactive'。
        7、文档解析完成后(就是所有dom节点都解析完),所有设置有defer的脚本会按照顺序执行。(注意与async的不同,但同样禁止使用document.write());
        8、document对象触发DOMContentLoaded事件,这也标志着程序执行从同步脚本执行阶段,转化为事件驱动阶段。
        9、当所有async的脚本加载完成并执行后、img等加载完成后,document.readyState = 'complete',window对象触发load事件。
        10、从此,以异步响应方式处理用户输入、网络事件等。
    
    38、异步加载js的几种方案:
        defer async
    异步加载兼容性写法:
    <script type="text/javascript">
      function asyncLoaded (url,callback) {
          var script = document.createElement('script');
          script.type = "text/javascript";
          if (script.readySate) {
              script.onreadystatechange = function (){
                  if (script.readySate == "complete" || script.readySate == "loaded") {
                      obj[callback]();
                      script.onreadystatechange = null ;
                  }
              }
          }else{
              script.onload = function(){
                  obj[callback]();
              }
          }
          script.src = url ;
          document.head.appendChild(script);
      }
    
    </script>
    
    39、打印结果:
    <script type="text/javascript">
        var a = (10*3-4/2 + 1)%2,
            b = 3;
        b %= a + 3;
        console.log(a++);
        console.log(--b);
    </script>
        结果:1   2
    
    
    40、使用原生js,addEventListener,给每个li元素绑定一个click事件,输出他们的顺序。
    <ul>
        <li>a</li>
        <li>a</li>
        <li>a</li>
        <li>a</li>
    </ul>
    <script type="text/javascript">
    
    var liCollection = document.getElementsByTagName('li'),
    len = liCollection.length;
    
    for (var i = 0; i < len; i++) {
        (function(j){
            liCollection[j].addEventListener('click',function(){
                console.log(j);
            }false);
        }(i))
     }
    </script>
    
    
    
    41、一个字符串由[a-z]组成,找出第一个只出现一次的字母
    <script type="text/javascript">
        Array.prototype.unique = function() {
         var len = this.length,
             obj = {},
             arr = [];
         for(var i = 0; i < len; i++){
           if(!obj[this[i]]) {
             obj[this[i]] = "1";
             arr.push(this[i]);
           }
         }
         return arr;
        }
        var str = "abaadf";
        var arr = str.split("");
        var arr1 = arr.unique();
        console.log(arr1[0]);
    </script>
    
    
    
    42、打印结果:
    <script type="text/javascript">
        var name = "222";
        var a = {
            name:"111",
            say:function(){
                console.log(this.name);
            }
        }
        var fun = a.say;
        fun();
        a.say();
        var b = {
            name:"333",
            say:function(fun){
                fun();
            }
        }
        b.say(a.say);
        b.say=a.say;
        b.say();
    </script>
    结果: 222  111  222  333
    
    43、
    <script type="text/javascript">
        var str = "你成哥很帅";
        str.length = 3;
        console.log(str);   
    </script>
    执行结果为:你成哥很帅
    原因:原始值不可改变
    
    44、请用多种方法创造对象:
        字面量 var obj = {};
        构造函数 var obj = new Object{};
        var obj = Object.create(原型)
    
    45、解决污染全局变量
        命名空间,闭包
    
    46、枚举一个对象中所有自有属性:
    <script type="text/javascript">
    
      Person.prototype.lastName = "ji";
    
      function Person(name,age){
        this.name  = name;
        this.age = age ;
      }
    
      var oPerson = new Person ('cheng',123);
      for(var prop in oPerson){
        if(oPerson.hasOwnProperty(prop)){
        console.log(oPerson[prop]);
        }
    }
    </script>
    
    
    47、让数组里的数据从大到小排列:
    <script type="text/javascript">
        arr.sort(function(a,b){
            return a - b;
        }());
    </script>
    
    
    48、es5严格模式如何使用,应该注意些什么:
    <script type="text/javascript">
    全局严格模式:直接加 字符串:"use strict";
    局部函数内严格模式(推荐)
    function test(){
        "use strict";
    }
    注意:不支持with,arguments.callee,func.caller,变量赋值前必须声明,局部this必须被赋值(Person.call(null/undefined) 赋值什么就是什么),拒绝重复属性和参数
    </script>
    
    
    49、选择html元素节点几种方法,以及他们各自的兼容性问题及特点:
    <script type="text/javascript">
        getElementsByTagName()[0];
        getElementById();
        getElementsByName();
        getElementByClassName(); interactive8及以下不兼容
        querySelectorAll();非实时ie7及以下不兼容
        querySelector();非实时ie7及以下不兼容
    1.getElementById方法定义在Document.prototype上,即Element节点上不能使用。
    2.getElementsByName方法定义在HTMLDocument.prototype上,即非html中的document以外不能使用(xml document,Element)
    3.getElementsByTagName方法定义在Document.prototype 和 Element.prototype上
    4.HTMLDocument.prototype定义了一些常用的属性,body,head,分别指代HTML文档中的<body><head>标签。
    5.Document.prototype上定义了documentElement属性,指代文档的根元素,在HTML文档中,他总是指代<html>元素
    6.getElementsByClassName、querySelectorAll、querySelector在Document,Element类中均有定义
    </script>
    
    
    50、说出节点类型的值为1,2,3,8,9的值对应的节点是什么:
    元素节点   —— 1 
    属性节点   —— 2
    文本节点   —— 3 
    注释节点   —— 8
    document  —— 9 单独成一类 文档节点
    <!-- DocumentFragment  ——  11 文档碎片 --> 
    <!-- 获取节点类型   nodeType  -->
    
    
    
    51、鼠标事件的触发顺序:
        mousedown; focus; mouseup; click;
        右键事件:
        <script type="text/javascript"> 
        elem.onmousedown = function (e) {
            if(e.button == 2){
                alert("右键点击")
            }
        }
        </script>
    
    
    52、数据格式JSON转换为字符串,以及把字符串转换为JSON的方法
    <script type="text/javascript">
        JSON.parse();  string — > json字符串
    JSON.stringify();   json — > string
    </script>
    
    53、BOM对象及其功能:
        Window     JavaScript 层级中的顶层对象,表示浏览器窗口。
            属性:
                closed  返回窗口是否已被关闭。
                document    对 Document 对象的只读引用。
                history 对 History 对象的只读引用。
                innerheight 返回窗口的文档显示区的高度。
                innerwidth  返回窗口的文档显示区的宽度。
            方法:
                alert() 显示带有一段消息和一个确认按钮的警告框。
                blur()  把键盘焦点从顶层窗口移开。
                clearInterval() 取消由 setInterval() 设置的 timeout。 
        
        Navigator  包含客户端浏览器的信息。
            属性:
                appCodeName 返回浏览器的代码名。 
            方法:
                javaEnabled()   规定浏览器是否启用 Java。
        
        Screen     包含客户端显示屏的信息。 
            属性:
                availHeight 返回显示屏幕的高度 (除 Windows 任务栏之外)。
                availWidth  返回显示屏幕的宽度 (除 Windows 任务栏之外)。
                width   返回显示器屏幕的宽度。
            
        History    包含了浏览器窗口访问过的 URL。 
            属性:
                length  返回浏览器历史列表中的 URL 数量。
            方法:
                back()  加载 history 列表中的前一个 URL。
                forward()   加载 history 列表中的下一个 URL。
                go()    加载 history 列表中的某个具体页面。
    
        Location   包含了当前 URL 的信息。
            属性:
                href    设置或返回完整的 URL。
            方法:
                assign()    加载新的文档。
                reload()    重新加载当前文档。
                replace()   用新的文档替换当前文档。
    
    
    54、说明position定位的值有什么区别,如果有不能兼容的问题,如何解决
        absolute 绝对定位
        relative 相对定位
        fixed    相对可视区定位,而且脱离原来位置 ie6不能用
        sticky回去查一查
    
    55、添加css代码使得ul外观可以包住li:
    <style type="text/css">
        ul{
            list-style: none;
            padding: 0;
        }
        ul>li{
            float: left;
        }
    
    
        ul:after{
        content:"";
        display:inline-block;
        clear:both;
    }
    
    </style>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    
    
    56、熟知的选择优先级关系(权重)
        !important          无穷大
        style(行间样式) 1000
        id                  100
        class/属性/伪类     10
        标签/伪元素          1
        通配符*                0
    
    
    57、display值及含义
    display值: inline---行级元素,不沾满整行,不可以改变宽高
                block----块级元素 沾满整行 可以改变宽高
                inline-block----行级块元素 不占满整行 可以改变宽高 
    
    
    58、写一个输入框,带有js功能,鼠标聚焦提示消息信息,失去焦点显示提示信息
    <style type="text/css">
    input{
        border: 1px solid black;
        color: #999;
    }
    
    .fontGrey{
    color: #999;
    }
    .fontNormal{
    color: #424242;
    }
    
    </style>
    </head>
    <body>
    username:<input tyoe="text" value="请输入用户名"onfocus="if(this value='请输入用户名'){this.value='';this.className='fontNormal'}"onblur="if(this.value==''){this.value='请输入用户名';this.className='fontGrey'}" onchange="console.log(this.value)">
    
    </body>
    
    59、写出打印结果并说明原因:
    <script type="text/javascript">
        function fn(a,b){
            arguments[0] = 1;
            console.log(a);
            fn(2,1);
        }
        打印:1;
        原因:实参,形参相统一;
    </script>
    
    60、将下列变量转化为小驼峰形式:my-first-name->myFirstName
    <script type="text/javascript">
        var str = "my-first-name";
        var reg =/-(\w)/g;
        var test = str.replace(reg,function($,$1){
            return $1.toUpperCase();
        });
        console.log(test);
        </script>
    
    61、将aaaaabbbb字符串调换成bbbbaaaa形式
    <script type="text/javascript">
        var str = "aaaabbbb";
         var reg = /(\w{4})(\w{4})/g;
         console.log(str.replace(reg,"$2$1"));
    </script>
    

    相关文章

      网友评论

          本文标题:javascript兼容方法或者原生方法总结

          本文链接:https://www.haomeiwen.com/subject/mjrhgctx.html