JS(1)

1.JS包括三部分组成ECMAScript(规定了编程语法和核心知识),
  DOM(页面文档对象),BOM(浏览器对象)
2.简单数据类型:Number,String,Boolean(默认值false),Undefined,Null
  复杂数据类型:Object,array,function
3.isNaN()判断是否是数字
4.字符串嵌套,符号外单内双,或者外双内单
5.转义字符\n换行,\t缩进,\b空格
6.任何数据与字符串想加都会变成字符串
7.true在加法运算中看做1,false看做0
8.一个变量声明后未赋值是undefined,与数字相加后是NaN
9.null与数字想加最后还是数字本身
10.prompt取来的值是字符串
11.数字字面量:8,9,布尔字面量:true,false
12.转换为字符串三种方法
(1)x.toString()
(2)String(x)
(3)利用+与字符串拼接(隐式转换)
13.转为数字类型方法
(1)parseInt(x),取整转换,若数字后面带单位则会自动去掉
(2)parseFloat(x)
(3)Number(x)(强制转换)
(4)利用-,*,/与数字运算
14.转换为布尔值方法Boolean(x),0,NaN,undefined,null,会转为false,其余都是true
15.前置运算符,先+1,后返回值;后置先返回原值,后+1;两种运算单独使用效果一样
   var e = 10
   e++(1)先返回e的值为10(2)再e+1=11
   ++e(1)先e+1=12(2)再返回e的值12
   结果为 10 + 12 = 22
   var f = e++ + ++e
   console.log(f);
16.逻辑中断原理:左边的表达式若能确定逻辑结果则不在运算右侧的表达式
(1)A&&B 中断:A为真则返回B,A为假则返回A
(2)A||B中断:A为真返回A,A为假则返回B
17.运算符优先级(图在下面,()优先级最高)

优先级运算符顺序
1小括号()
2一元运算符++  --  !
3算数运算符

先 *  / % 后 + -

4关系运算符 >  >=  <  <=
5相等运算符==  !=  ===  !==
6逻辑运算符先 && 后 ||
7赋值运算符 =
8逗号运算符,
18.三元表达式:条件?A:B,若条件为真则返回A,条件为假则返回B
19.switch里的变量必须和case中的值===才能匹配
20.分支少的时候if else效率高,多的时候switch效率高
21.for循环执行过程:i=1指执行一次,然后判断,满足条件之后执行代码,最后执行i++;
   第二轮直接从i<=100开始执行判断 for(var i =1 ; i<=100 ; i++){代码}
22.continue跳出本次循环,继续下次循环;break马上停止跳出整个循环
23.创建数组有两种方式
(1)var arr = new Array()
(2)var arr = []
24.新增数元素
(1)修改长度,新增的元素是undefined
   var arr = ['0','1','2','3']
   arr.length = 5
(2)追加数组元素
   var arr = ['0','1','2','3']
   arr[4] = '4'
25.选出不是0的数
   var arr = [2,0,5,1,44,1,0,1,3]
   var newArr = []
   for(var i=0;i<arr.length;i++){
     if(arr[i]!=0){
       newArr[newArr.length] = arr[i]
     }
   }
26.反转数组
   var arr = [1,2,3,4,5]
   var newArr = []
   for(var i=arr.length-1;i>=0;i--){
     newArr[newArr.length] = arr[i]
   }
27.冒泡排序
   var arr = [1,4,5,9,10,12,44,192]
   第一层控制趟数,例如五个数字要排四次
   for(var i=0;i<arr.length;i++){
     第二层管比较的次数
     for(var j=0;j<=arr.length-i-1;j++){
       if(arr[j]>arr[j+1])
       {
         var temp = arr[j]
         arr[j] = arr[j+1]
         arr[j+1] = temp
       }
     }
   }
   console.log(arr);
28.声明函数
(1)字面量声明:function x (){函数体},调用函数x(),不调用不执行
(2)表达式声明:var x = function(){}(匿名函数)
   x是变量名不是函数名,预解析时会有影响,调用函数时必须写在声明下面
29.实参和形参不匹配时,实参多时截掉多余的,实参少的时候多出来的形参是undefined
30.return会终止函数,把值返回给函数调用者;没有return则返回undefined
31.arguments是函数的内置对象,所有函数都有,里面存储了所有的实参,是一个伪数组
   arguments伪数组具有length属性,按照索引的方式进行储存,可以遍历,但没有push,pop等方法
32.es6之前作用域:全局和局部,局部作用域指函数内部
   在函数外声明或者在函数中没有声明但直接赋值的变量是全局变量,只有在关闭浏览器时才能销毁;
   函数形参可以看做局部变量,局部变量再程序执行完毕时就销毁了
   es6之后:块级作用域,也就是{}包裹的
33.作用域链:内部函数可以访问外部函数的变量,当使用变量时回一级一级往外找链式查找
34.JS引擎执行代码时会先把var和function提升到当前作用域的最前面,这就叫预解析
   然后所有代码按照解析之后的按顺序执行
   预解析:先输出变量后声明变量,会输出undefined;先调用函数再用表达式声明函数会报错
   预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升:把所有的变量声明提升到当前作用域的最前面,不会提升赋值
(2)函数提升:把所有的函数声明提升到当前作用域最前面,但不调用函数
35.预解析案例1
   var a = 1
   f1();
   function f1(){
     var b = 9
     console.log(a);
     console.log(b);
     var a = '123'
   }
   预解析成
   var a
   function f1(){
     var b
     var a
     b = 9
     console.log(a);
     console.log(b);
     a = '123'
   }
   a = 1
   f1()
   结果为undefined和9
   预解析案例2
   f1()
   console.log(c);
   console.log(b);
   console.log(a);
   function f1(){
     var a = b = c = 9 
     //相当于var a = 9 ; b = 9 ; c = 9
     //b和c直接赋值没有声明所以被视为全局变量
     //若想要集体声明应该写为var a = 9 ,b = 9 , c = 9
     console.log(a);
     console.log(b);
     console.log(c);
   }
   解析成
   function f1(){
     var a 
     a = b = c = 9 
     console.log(a);
     console.log(b);
     console.log(c);
   }
   f1()
   console.log(c);
   console.log(b);
   console.log(a);
   结果为9,9,9,9,9,报错
36.JS共有三种对象:自定义对象,内置对象,浏览器对象
   前两个属于ECMAScript,后一个是JS独有的
37.创建对象方法
(1)字面量创建对象
   var obj = {
    x:y,
    m:n,
    hello:function(){
      函数体
    }
   }
(2)利用new:var obj = new Object()创建一个空对象
   追加属性obj.name = 'x',追加方法obj.hello = function(){函数体}
(3)利用构造函数创建对象
   构造函数就是把对象里一些相同的属性和方法抽象出来封装到函数里面
   在创建多个对象时减少代码复用
   类似JAVA和C里的类,通过new关键字创建对象的过程我们也称为对象实例化
   首字母大写,不需要写return就能自动返回对象
   function People(name,age,sex){
     this.name = name
     this.age = age
     this.sex = sex
     this.play = function(game){
       console.log(game);
     }
   }
   var wjk = new Star('温俊康',21,'男');
   console.log(wjk.name)
   console.log(wjk['age'])
   wjk.play('LOL')
38.调用对象属性和方法
(1)obj.x,obj.sayHello()
(2)obj['x']
39.new关键字执行过程
(1)new构造函数会在内存中创建一个空对象
(2)构造函数里this就会指向刚创建的空对象
(3)执行构造函数里的代码给空对象进行赋值
(4)返回这个对象
40.遍历对象
   for(var key in wjk){
     key是属性名
     console.log(key)
     obj[key]是属性值
     console.log(wjk[key])
   }
41.Math内置对象
(1)不需要new来创建
(2)Math.abs()绝对值,回把字符串隐式转换为数字型
(3)Math.round(-1.5)结果为-1,四舍五入,0.5 特殊,它往大的那面取
(4)随机整数公式(包含两个边界值)
   function getRandom(min,max){
     return Math.floor(Math.random() * (max - min + 1)) + min
   }
42.Date内置对象
(1)Date是一个构造函数,需要new创建,var date = new Date()没跟参数则返回当前系统时间
(2)格式化日期
   var date = new Date()
   返回当前日期的年
   var year = date.getFullYear()
   返回月份-1,若现在是5月则返回4
   var month = date.getMonth()+1
   返回今天是几号
   var dates = date.getDate()
   周一返回1,周二返回2,但周日返回0,所以数组以0为开头
   var day = date.getDay()
   var arr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
   console.log('日期是' + year + '年' + month + '月' + dates + '日' + arr[day]);
(3)格式化时间
   function getTime() {
     var time = new Date()
     var h = time.getHours()
     h = h < 10 ? '0' + h : h
     var m = time.getMinutes()
     m = m < 10 ? '0' + m : m
     var s = time.getSeconds()
     s = s < 10 ? '0' + s : s
     return h + ':' + m + ':' + s
   }
   console.log(getTime());
43.时间戳三种方法
   方法1
   var date = new Date()
   console.log(date.valueOf())
   console.log(date.getTime())
   方法2
   var date = +new Date()
   console.log(date2)
   方法3 H5新增
   console.log(Date.now());
44.利用时间戳想减实现倒计时
   function countDown(time) {
     返回当前时间总毫秒数
     var nowTime = +new Date()
     返回用用户输入的时间的毫秒数
     var inputTime = +new Date(time)
     得到总秒数
     var times = (inputTime - nowTime) / 1000
     天数
     var day = parseInt(times / 60 / 60 / 24)
     小时数
     var hour = parseInt(times / 60 / 60 % 24)
     分钟数
     var minute = parseInt(times / 60 % 60)
     秒数
     var second = parseInt(times % 60)
     return day + '天' + hour + '小时' + minute + '分钟' + second + '秒'
   }
   setInterval(()=>{
     console.log(countDown('2025-5-1 20:00:00'));
   },1000)
45.数组内置对象
   数组需要用new创建
(1)var arr = new Array(2)表示数组长度为2,有两个空元素
(2)var arr = new Array(2 , 3)表示数组里有2,3这两个元素
46.检测是否为数组
(1)instanceof运算符检测
   var arr = []
   var obj = {}
   console.log(arr instanceof Array)
   console.log(obj instanceof Array)
(2)Array.isArray() H5新增,ie9以上支持
   console.log(Array.isArray(arr))
   console.log(Array.isArray(obj))
47.数组常用的API
(1)push和unshift添加结束后返回值是数组长度
   这两个方法都会使原数组发生变化
   var arr = [1,2,3,4]
   在数组后面添加5和6
   arr.push(5,6)
   在数组前面添加0
   arr.unshift(0)
(2)pop和shift一次都只能删除一个元素,他们的返回值都是删除的那个元素
   原数组会发生改变
   var arr = [1,2,3,4]
   删除最后一个元素
   arr.pop()
   删除第一个元素
   arr.shift()
(3)封装好的两个方法
   var arr = [3,1,55,13]
   翻转数组
   arr.reverse()
   冒泡排序
   arr.sort(function(a,b){
     升序排列
     return a-b
     降序排列
     return b-a
   })
48.数组索引
(1)返回数组中的值的索引
   var arr = [3,1,55,13]
   从前往后找
   console.log(arr.indexOf(3))//0
   找不到则返回-1
   console.log(arr.indexOf(2))//-1
   从后往前找
   console.log(arr.lastIndexOf(13))//3
(2)利用返回数组索引的方法给数组去重
   思路:遍历旧数组,把每个元素拿到新数组里去查询,没有就加入新数组,有就略过
   实现
   var arr = [1,1,1,2,2,3,3,4,4,5,6,6,7,7,]
   function uniqueArr(arr){
     var newArr = []
     for(var i=0;i<arr.length;i++){
       if(newArr.indexOf(arr[i])===-1){
         newArr.push(arr[i])
       }
     }
     return newArr
   }
   console.log(uniqueArr(arr));
49.数组转化为字符串
(1)arr.toString()
(2)arr.join('-')以-为分隔符,不写则默认用逗号分隔
50.基本包装类型就是把简单类型包装成复杂类型
   JS中有三个特殊的引用的类型来操作基本数据类型,String,Number和Boolean
   var str = 'wenjunkang'
   console.log(str.length)
   相当于
   var temp = new String('wenjunkang')
   str = temp
   temp = null
   字符串所有的方法都不会改变字符串本身,会返回新字符串
   当字符串的值改变时,会开辟新的内存来存储改变后的字符串
   这是字符串不可变性,所以不要大量拼接字符串
51.字符串索引
(1)返回字符串值的索引
   var str = '汝若不胜酒力,酒可移步与犬共饮酒'
   从索引5的位置开始寻找
   console.log(str.indexOf('酒',5))
   只返回第一个酒的索引
   console.log(str.indexOf('酒'))
(2)寻找特定字符出现的位置和次数
   var str = "oiaooafadtgah"
   var index = str.indexOf('o')
   var i = 0 
   while(index !== -1){
     console.log(index)
     i++
     index = str.indexOf('o',index+1)
   }
   console.log('o出现了'+ i + '次');
(3)根据索引返回字符
   var str = 'abcde'
   返回对应字符
   console.log(str.charAt(2))
   返回对应位置字符的ASCII码
   console.log(str.charCodeAt(2))
   H5新增的
   console.log(str[2])
(4)利用charAt()统计出现最多次数的字符
   思想:把每个字符都储存给对象,若对象有该属性就+1,没有就创建这个属性
   var str = 'aacauoiajfwed'
   var obj ={}
   for(var i = 0;i<str.length;i++){
     //遍历数组
     var char = str.charAt(i)
     if(obj[char]){
       obj[char]++
     }else(
       obj[char] = 1
     )
   }
   console.log(obj);
52.数组API
(1)常用API
   var str1 = '111'
   var str2 = '222'
   拼接
   console.log(str1.concat(str2))
   var str3 = '1114141532'
   截取,从索引2开始截取3个
   console.log(str3.substr(2,3))//输出141
   替换遇到的第一个4,换成a
   console.log(str3.replace('4','a'));
   全部替换
   while(str3.indexOf('1')!== -1){
     str3=str3.replace('1','b')
   }
   console.log(str3);    
(2)字符串转数组
   str.split('分隔符')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无非是我

不必打赏,欢迎指正

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值