js高级
js高级
  1.面向对象
    1.面向对象
      1. 面向对象 是注重结果 思维方式
        面向过程： 注重过程
        面向对象： 注重结果
      2. 面向对象本质是对面向过程的封装
    2.内置对象
      数组对象
        join()
        reveser()
        sort()
        concat()
      字符串
        indexOf()
        split()
        substr()
        toLocaleLowerCase()
    3.构造函数new原理
      1.工厂函数和构造函数
        工厂函数： 用于创建对象的 函数
        构造函数 : new 调用的函数
        通途一致：都是创建对象
      2.new关键字原理4个步骤
        a.创建空对象
        b.this指向这个对象
        c.对象赋值
        d.返回这个对象
      3.构造函数内部使用return
        return 值类型。 无效，返回new创建的对象
        return 引用类型。 有效，覆盖new创建的对象
    4.原型对象
      1.原型对象
        创建函数的时候，系统会自动创建一个对应的对象。 称之为原型对象。
      2.作用
        内存资源浪费 + 全局变量污染
      3.构造函数、原型对象、实例对象的关系
        构造函数： 有一个prototype属性， 指向原型对象
        原型对象 ： 有一个constructor属性，指向构造函数
        实例对象 ： 有一个__proto__属性，指向原型对象
    5.原型链
      原型链 : 每一个对象都有原型，原型也是对象也有自己的原型，以此类推形成链式结构
      对象访问原型链规则 ： 就近原则
        先访问自己，自己没有找原型，原型没有找原型的原型，此类类推直到原型链终点null. 如果还没有，属性则获取undefined, 方法则报错xxx is not funtion
      原型链 ： 继承
  2.函数进阶
    1.this指向
      普通函数 函数名() : this指向window
      对象方法 对象名.方法名() : this指向对象
      构造函数 new 函数名(): this指向new创建的实例对象
    2.函数上下文调用
      伪数组转真数组 ： Array.from(伪数组)
      数组求最大值: Math.max(...数组名)
    3.闭包
      闭包 = 函数 + 上下文引用
      作用： 解决变量污染
    4.递归
      函数内部调用自己
      作用： 遍历dom树 + 深拷贝
  3.ES6新语法
/* 1.内置对象 : js作者提供好了对象，封装了很多方法，直接使用即可
2.内置对象api : 内置对象的方法
小节： 学习内置对象不需要死记硬背, 常用的熟能生巧
*/
let arr = [88,60,50,100,90,20] //new Array(88,60,50,100,90,20)
/*1.数组增删改查操作
(1)arr.push() :数组最后面添加元素
(2)arr.unshift() :数组最前面添加元素
(3)arr.pop() :删除数组最后一个元素
(4)arr.shift() :删除数组第一个元素
(5)arr.splice() :删除数组任意下标元素
*/
/* 2. arr.reverse() : 翻转数组 */
arr.reverse()
console.log(arr)//[20, 90, 100, 50, 60, 88]
/* 3. arr.sort() */
//参数是一个回调函数，代表排序规则
arr.sort( function(a,b){
// return a-b//从小到大
return b-a//从大到小
} )
console.log( arr )
/* 4. arr.join('分隔符') : 把数组每一个元素拼接成一个字符串 */
let str = arr.join('|')
console.log( str )//100|90|88|60|50|20
let str = '我是黑马颜值担当ikun爱你么么哒'
//1.字符串和数组有点类似，也有长度和下标
console.log( str.length )
console.log( str[2] )//'黑'
// for(let i = 0;i<str.length;i++){
// console.log(str[i]);
// }
//2.其他学习过的常用方法
/*
str.replace('A','B') : A替换成B
str.trim() : 去除字符串两头的空格
*/
//3. str.indexOf('字符串') : 获取字符串首字符在str中的下标
/*
如果字符串存在， 则返回首字符下标
如果字符串不存在，则返回固定值 -1
应用场景： 判断 str中有没有 '字符串',如果没有则-1，有则下标
*/
let index1 = str.indexOf('黑马')
console.log( index1 )//2
let index2 = str.indexOf('武汉')
console.log( index2 )//-1
let index3 = str.indexOf('黑你')
console.log( index3 )//-1
//4. str.split('分隔符') ： 使用分隔符将字符串切割成一个数组
//提取网址中的参数
let urlStr = 'http://www.itheima.com?phone=123&subject=前端'
let arr1 = urlStr.split('?')
console.log(arr1)//['http://www.itheima.com', 'phone=123&subject=前端']
let arr2 = urlStr.split('=')
console.log( arr2 )//['http://www.itheima.com?phone', '123&subject', '前端']
//5. str.substr(index,length) 从index下标开始往后截取length长度的字符串
console.log( str.substr(2,6) )//从2下标开始往后截取6个字 黑马颜值担当
//6.大小写转换(中文没有大小写) : 文字验证码一般不区分大小写
console.log( 'adaSFSDsfdsSDFS'.toLocaleLowerCase() )//adasfsdsfdssdfs
console.log( 'adaSFSDsfdsSDFS'.toLocaleUpperCase() )//ADASFSDSFDSSDFS
console.log( '中国我爱你'.toLocaleUpperCase() )//中国我爱你