web前端-js

1. js基础语法

  声明变量

    var a = 10;

  查看变量类型

    typeof a;

  打印,测试语句

    alert(a);              #使用弹出框显示

    console.log(a);             #使用console日志打印

    var isdelete = confirm(a);       #弹框选择 ,isdelete会取到bool值 ,a提示信息

  数据类型

    基础数据类型,以及转换数据类型(不可变)

1)number(0可以做分子)
var a = String(a);       #将a转换为字符串

2)string
var a = Number(a);      #将a转换为数值类型
  拼接:使用+号
  内置方法:
    返回指定索引的值charAt()
      a = 'quguanwen';a.charAt(3);
    拼接字符串concat
      var a ='good';var b ='nice';var c =a.concat(b);c;
    字符串元素替换replace
      var a='good';var b =a.replace('od','ll');b;
    字符串分割列表split返回数组
      var b='goll';var arr1 = b.split('o');arr1;
    

3)underfined
var a;           #仅声明的都是underfined类型 

4)boolean
任何类型都可以转boolean  #仅0 ,null,NaN,underfined为false

5)null空对象

    引用数据类型(可变数据类型)   

1)function函数
  普通函数
    function count(a,b,c){return a+b+c;}
    console.log(count(1,2,3));
  匿名函数(没有函数名,把函数给了一个变量)
    var counts = function () {return 666;}
    counts();
  自执行函数(直接调用自己)
    (function add(a,b){return a+b})(1,2);

2)Array数组(类似列表)
  定义数组
    var arr1 = [1,2,3,null,'polp'];
  指定索引
    console.log(arr1[2]);
  打印长度
    console.log(arr1.length);
  方法
    合并数组concat(类似extend)
      var arr1=[1,2];var arr2=[3,4];arr1.concat(arr2);
    拼接字符串join(类似join)
      var arr1=['q','a'];var arr2 = arr1.join('+');arr2; 
    末尾追加元素push(类似append)
      var b1=[1,2,3];b1.push(4);b1;
    末尾删除元素pop
      var b1=[1,2,3];b1.pop();b1;
    起始写入元素unshift ,返回值是数组长度
      var arr1=['a','10','1a0'];arr1.unshift('lp');
    起始删除元素shift,返回被删除的值
      var arr1=['a','10','1a0'];arr1.unshift('lp');arr1.shift('lp');    
    切片slice(起始索引,长度)
      var arr1=[1,2,3,4,5,6];arr1.slice(0,2);
    删除splice(起始索引,长度),返回值是被删除的值
      var arr1=[1,2,3,4,5,6];arr1.splice(0,2);
    添加元素splice(添加到的索引位置,0,内容1,内容2)
      var arr1=[1,2,3,4,5,6];arr1.splice(3,0,'ll','oo');
    替换元素splice(替换起始索引,替换个数,替换内容);
      var ki = [1,2,3,4,5,6,7,8,9];arr1.splice(3,2,'oo','tt');arr1;
    排序数组sort()(不区分类型顺序0-9,A-Z,a-z)
      var ab=[1,2,65,3,43,1,2,'a','d','f','ba','ab','VB','A1','0'];ab.sort();
    判断是否为数组
      var arr1=[1,2,3];Array.isArray(arr1);
    数组长度
      var arr1=[1,2,3];arr1.length;

3)object对象(类似dict,就是个类,定义属性,定义方法)
  var person = {"name":'quguanwen','age':10,func1:function(a,b){alert(a+b)}}
  person.func1(0,19);      #执行函数

4)date
  创建当前时间对象
    var newdate = new Date();
  时间对象拿出年份
    var year = newdate.getFullYear();year;
  时间对象拿出月份(getMoth能取到是0-11)
    var month = newdate.getMonth();month+1;
  时间对象拿出日
    var date = newdate.getDate();date;
  时间对象拿出星期(0-6 ,其中0是周日)
    var day1 = newdate.getDay();day1;
  时间对象取出小时
    var hour = newdate.getHours();hour;
  时间对象取出份
    var min = newdate.getMinutes();min;
  时间对象取出秒
    var s = newdate.getSeconds();s;

  运算符

    赋值运算符: = 

    算数运算符: + - * / %  -- ++

    比较运算符:  ==(数值相等即可,不考虑数据类型)   ===(数值相等,数据类型也要相等)  !=(数值不等为真)  !==(数值不等的同时类型不同才为真)

  流程控制

// if-else
var isdelete = confirm('确定与取消');
arr1 = [1, 2, 3, 4];
if (isdelete) {
alert('确定')
} else {
alert('取消')
}


// while          #三步走:1初始化条件变量 2.判断循环条件 3.改变变量
var a = 0;
while (a < 10 ) {
console.log(12);
a++;
}

// switch          #类似shell的case语句,常用于对标键盘执行操作
switch(code)
  case 12:
    执行操作
    break;
  case 20;
    执行操作1
    break;
  default:
    都不满足走default;

// for            #三步走:1初始化条件变量 2.判断循环条件 3.改变变量
for (var i = 0; i < 10; i++) {
console.log(i);
}

  Math内置对象

    向上取整  var a = 11.9; Math.ceil(a)

    向下取整  var a = 11.9; Math.floor(a)

    比较取大  Math.max(1,2,3,4,10);

    比较取小  Math.min(1,2,3,4,10);

    随机数 (仅有0-1之间数字)

      随机数100-500 :Math.random()*400+100;

      随机数0-300 :Math.random()*300;

2. 制作动态时间显示

   1) 指定想要在哪个dom标签进行操作

   2) 完成生成当前时间的函数 ,并对dom操作 ,显示内容

   3) 使用定时器触发函数

<h2 id="time1"></h2>
    <script>
        //第一步绑定一个标签对象,通过id绑定
        var mytime = document.getElementById('time1');
        //第二步我们写一个函数,每次执行函数 ,函数对dom对象做一次操作!!
        function timetemplate() {
            var myDate = new Date();
            var year = myDate.getFullYear();
            var mouth = myDate.getMonth()+1;
            var date = myDate.getDate();
            var hour = myDate.getHours();
            var min=myDate.getMinutes();
            var sec = myDate.getSeconds();
            var datetime = `${year}-${mouth}-${date} ${hour}:${min}:${sec}`;
            console.log(datetime);
            mytime.innerText = datetime;
        }
        //第三步我们写一个定时器,要求每个1000毫秒即1秒执行一次函数,那么页面就在不停变化
        setInterval(function () {
            timetemplate();
        },1000)
    </script>

3.定时器使用

  setInterval      #周期循环定时器

  setTimeout       #延时定时器 ,仅执行一次

  clearInterval(obj)   #清空周期定时器对象

  clearTimeout(obj)    #清空延时定时器

  定时器没有垃圾回收机制 ,所以创建的定时器对象都回保留 ,所以每次需要清除定时器, 因为代码执行顺序 ,如果代码出现clear可能定时器还没到执行就被清空了

  定时器中是一个函数 

<script>
    settime2 = setInterval(function () {
        console.log(888)
    }, 1000);

    settime1 = setTimeout(function () {
        clearInterval(settime2)
    }, 3000);

    clearTimeout(settime1)

</script>

4.js变量提升

  使用var声明变量时会出现一个问题 ,js会先将变量声明在最前面 ,如var a ,类型也就是undefine .所以我们使用let声明变量

5.DOM操作-文档对象模型

  HTML文档被解析成DOM树模型,可以用DOM提供的API去获取操纵HTML文档上的元素 ,如document.getElementById("id"),这个就是一个DOM里的API,用于获取HTML标签元素 ,再用js操作

   获取文档对象模型

    由于代码加载顺序 ,一般将script标签写在后面 ,当script写在代码前面的时候可以使用window.onload回调函数 

<script>
    window.onload = function () {
        var test = document.getElementById('a2');
        test.action = 'www.qq.com'
    };
</script>
<form id="a2" action="www.baidu.com" type=""></form>

   获取DOM三种方式

    1).通过id找到标签, 唯一

      var obj = document.getElementById('box1')

    2).通过class找到标签, 不唯一 ,得到一个对象集合(就算仅一个对象也是一个集合) ,可以通过索引取到dom ,也可以遍历

      var test = document.getElementsByClassName('a1');

      test[0]                    #集合中的一个对象

    3).通过标签找到标签 ,也不唯一 

      var test = document.getElementsByTagName('a');      

   对值的操作  

     1) 仅对标签中的文字进行替换操作

      dom对象.innerText = '值'

     2) 对标签实现替换操作

      dom对象.innerHTML = '<input type="text">'      # 这个dom对应的标签就变成了input了

   对属性操作

     dom对象.title = ''        #改变悬浮提示

     dom对象.className = ''      #直接改变了class选择器

     dom对象.name = ''         #改变name属性,input标签中的name

     dom对象.value= ''        #改变value属性,input标签中的value

     dom对象.id= ''         #改变标签id选择器

     dom对象.src= ''          #更改image的src

     dom对象.href= ''         #对a标签的跳转修改

     dom对象.自定义属性= ''        #对自定义属性

     dom对象.action= ''         #form标签的动作 ,修改提交表单地址

     dom对象.type= ''         #对input标签类型操作修改

     dom对象.method= ''         #对表单的请求类型操作

     dom对象.style.margin = ''      #对标签css样式操作

6.dom操作事件驱动

  事件封装函数 ,函数中定义操作dom对象 ,当事件触发后执行函数

  onclick (单击事件)

  ondblclick (双击事件)

  onmouseenter (鼠标悬浮事件)

  oninput (实时监听输入事件)

  语法: dom对象.事件 = 函数          #重点 函数中可以调用this ,这个this就像self ,是dom对象本身

####点击事件触发函数
<div style=" 20px;height: 20px;background-color: burlywood" class="d1">n</div> <script> let test = document.getElementsByClassName('d1'); test[0].onclick = function () { alert(this.innerText); } </script>


####鼠标悬浮事件触发函数实现盒子移动
<div style=" 200px;height: 200px;background-color: burlywood" class="d1">n</div>
<script>
let test = document.getElementsByClassName('d1')[0];
let num = 0;
let timer1= null;
test.onmouseenter = function () {
clearInterval(timer1);
timer1 = setInterval(function () {
num += 10;
test.style.marginLeft = num + 'px';
}, 50);
};
</script>

####实时输入监听
<div style=" 200px;height: 200px;background-color: burlywood" class="d1"></div>
<input type="text" id="i1">
<script>
let test = document.getElementsByClassName('d1')[0];
let test1 = document.getElementById('i1');

test1.oninput = function () {
test.innerText = this.value;
}
</script>

####实现多选条件按钮 ,按钮点击会出现选中状态 ,可以多选 ,当点击全部按钮 ,仅全部按钮变色 ,最好是通过添加class来渲染按钮
<div>
<input type="button" value="全部" id="s1">
<input type="button" value="篮球" class="like" id="s2">
<input type="button" value="rap" class="like" id="s3">
<input type="button" value="唱跳" class="like" id="s4">
</div>
<script>
let s1 = document.getElementById('s1');
let like = document.getElementsByClassName('like');
for (let i = 0; i < like.length; i++) {
like[i].numi = i;
like[i].onclick = function () {
this.style.backgroundColor = 'burlywood';
s1.style.backgroundColor = 'cornflowerblue';
}
}

s1.onclick = function () {
for (let x = 0; x < like.length; x++) {
like[x].style.backgroundColor = 'cornflowerblue';
}
this.style.backgroundColor = 'burlywood';
}

</script>

7.dom的创建添加删除

  前后端交互思想 ,数据驱动试图 ,根据后端给的数据 ,决定前端展示的标签和内容

  document.getElementById               #选中html中的标签dom对象

  document.createElement(' html标签 ')            #创建dom对象

  父dom对象.appendChild(dom对象)             #为dom对象创建子标签 ,子标签也要是dom对象

  父dom对象.removeChild(dom对象)            #移除指定的子对象

<body>
<ol id="ol1"></ol>
<script>
    //获取dom
    let testol = document.getElementById('ol1');
    //后端数据,驱动页面
    dataarry = [900, 700, 300, 400];
    //forEach 每个对象 ,和对应索引传给函数
    dataarry.forEach(function (item, index) {
        //创建dom
        let testli = document.createElement('li');
        testli.num = index;
        testli.innerHTML = `<h1>${item}</h1>
            <button class="del">删除</button>`;
        //dom中追加子元素
        testol.appendChild(testli);
    });
    
    let odel = document.getElementsByClassName('del');
    for(let i=0;i<odel.length;i++){
        odel[i].onclick = function () {
            //移除dom ,ol标签的dom对象移除自己的子对象那就是li标签, 通过odel这个dom对象的父标签就是li标签 ,使用this.parentNode可直接获取li标签
            testol.removeChild(this.parentNode);
        }
    }
</script>
</body>

8.BOM浏览器对象模型

  hostname              #获得服务器主机名

  port                  #获得服务器的端口

  pathname              #获得请求的页面的路径名

  protocol                  #获得协议

  search                 #获得请求参数

  reload()               #重新载入页面

<script>
    console.log(window.location.hostname);  
    console.log(window.location.port);
    console.log(window.location.pathname);
    console.log(window.location.protocol);
    console.log(window.location.search);
    window.location.reload();
</script>
原文地址:https://www.cnblogs.com/quguanwen/p/11339979.html