初学JavaScript小总结

JavaScript中数据类型

  • 四基:Number(数值型)、String(字符串型)、Boolean(布尔型)、Symbol(符号型)、NaN(特殊数值类型)
  • 两空:Null、Undfined
  • 一对象:Object

 数据类型互相转换

  • 将其他类型转换成Number型:

 1、Number()

console.log(Number('123')) //123

console.log(Number('12.2')) //12.2

console.log(Number(true)) //1

console.log(Number(false))//0

2、paserInt()

 console.log(parseInt(1))//1

console.log(parseInt(null))  // NaN

console.log(parseInt(undefined))//NaN

 console.log(parseInt('HELLO'))//NaN

console.log(parseInt('123XXX'))   //123  遇到第一个非number数据形式的字符就停止转换!将之前的数值格式的数据转换并返回

console.log(parseInt('123.5XXX')) //123

3、paserFloat()

console.log(parseFloat(1))  //1

console.log(parseFloat('1.2'))  //1.2

console.log(parseFloat(null))  //NaN

console.log(parseFloat(undefined))  //NaN

console.log(parseFloat('123.5XXXX'))  //123.5

  • 将其他类型转变为String型 

1、String()

console.log(String(123))  //123

console.log(String('xxx'))  //xxx

console.log(String(true))  //true

2、toString()

var num = 100

 console.log(num.toString())  //100

 3、 +  (当‘+’号两边有一侧为字符串类型时,此时的‘+’号作为拼接符,)

console.log(1+'a')  //1a

  • 其他类型转变为Boolean型 

Boolean()

console.log(Boolean(0))  //false

console.log(Boolean('4'))  //true

console.log(Boolean(null))  //false

 console.log(Boolean(undefined)  //false


 JS中的运算符

  • 算术运算符
  • 单目运算符
  • 自增自减运算符
  • 比较运算符
  • 逻辑运算符
  • 括号运算符
  • 逗号运算符
  • 条件运算符 

 流程控制结构:顺序结构、选择结构、循环结构 

  • 顺序结构 :js代码整体的运行轨迹是从上往下依次执行的
  • 选择结构:单分支-----if语句、  双分支------if....else、 多分支------if....else 的嵌套、条件分支-----switch.....case   
  • 循环结构:for、while、do.....while

 JavaScript中的对象类型 

        在JavaScript中除了基本数据类型外,其他的数据类型都是对象类型,称为复杂数据类型(引用数据类型)。对象可分为{ }(浅称为花括号对象)、[ ](数组对象)、函数(函数对象)、js的内置对象、浏览器提供的对象(宿主对象)


作用域 

        var声明的变量以及function声明的函数在声明创建的时候,其作用域就已经确定了!

        js中作用域:

  • 全局作用域
  • 函数作用域
  • 块级作用域

预解析  

 JS的代码并不是一上来就马上开始解释执行,而是在执行前又一个短暂的预解析的过程! 预解析中主要做以下事情:

1、构建全局对象

2、寻找当前作用域下所声明的所有的var 声明变量 以及 function声明的函数,将他们提前到当前作用域的开始位置

 

 注意:函数和变量都需进行预解析时,函数应优先于变量!函数作用域中也会存在变量和函数的提升,匿名函数或者函数表达式是不进行函数提升的,对象中保存的函数也不会进行提升 


 this关键字

        当函数被调用时,运行环境会自动向该函数隐式传入this对象。this的指向是变化的,在不同情况下函数的执行中,this的指向是不一样的!

  •  当函数作为普通函数调用执行时   函数名()或IIFE  函数的this指向的是window

function fun1(){

console.log(this)

}

fun1()  //window{...}

;(function(){

console.log(this)

})()  //window{...}

  

  • 当函数作为某个对象的方法进行调用时,该方法中的this指向的是调用者,而非持有者!对象名.方法()   表达式.方法()  对象名[方法名]()

function fun1(){

            console.log(this)

        }

        window.fun1()  //window{...}

        var obj1 = {

            name:'obj1',

            fun1:function(){

                console.log(this)

            }

        }

        obj1.fun1()  //obj1{...}

        obj1['fun1']()  //obj1{...}


this劫持 

正常情况下this的指向规则:

            1、在全局作用域下访问this,this是指向window

            2、当函数以函数形式调用时,this是指向window

            3、当函数以 IIFE形式调用时,this是指向window

            4、当函数以方法的形式调用时,this指向的是调用者,而非持有者

            5、当作为构造函数调用时,this指向一个空对象 {}

this的劫持:强行的人为改变this的指向!

        实现this劫持的三种方式(基于三个方法):apply  call  bind

        apply 和 call 用法基本一致

        唯一不同之处:

        apply 接受 两个参数  1、对象  2、数组  将其余参数统一存放到该数组中

        call  接受任意个参数 1、对象  其余参数就是正常的函数执行所需要的实参逗号分隔

        bind  将函数进行改造后,并重新返回,最终执行!


闭包

闭包就是当函数被嵌套声明时,并且该函数被直接或者间接返回或者赋值给某个全局变量!

那么这个时候js内部发生一些事情

        1、函数的地址值被返回了 

        2、产生了一个特殊的对象,闭包 (在这个闭包它打包了该函数作用域链上的所有的变量以及函数)

 //   产生了两个独立的闭包对象,每个闭包对象分别有一个链子
    //   function fun1() {
    //     var a, b
    //     a = 100
    //     b = 200
    //     function xxx() {
    //       console.log('xxx')
    //     }

    //     function fun2() {
    //       console.log(++a)
    //     }
    //     return fun2
    //   }
    //   var myfun1 = fun1()
    //   var myfun2 = fun1()
    //   myfun1()//101
    //   myfun2()//101

​

​

原型属性 

每一个对象身上都具备一个属性,该属性称作为原型属性!原型属性有两类:

  • 显式原型属性(prototype):每一个函数都具备prototype,也具备__proto__ 
  • 隐式原型属性(proto):   每一个实例对象都具备__proto__

 原型对象 

存放在prototype属性或者__proto__属性中的对象,称作为原型对象 

         prototype,存放在该属性中的对象称作为显式原型对象

        __proto__,存放在该属性中的对象称作为隐式原型对象

 显式原型对象(prototype)的作用:

1、当函数作为构造函数使用,该属性才发发挥作用,如果是普通函数执行,原型对象毫无作用

2、当函数作为构造函数时,会创建一个实列的空对象,创建好空对象后,就会把 prototype中指向的原型对象赋值给 空对象的__proto__属性中,这样被创建好的空对象就具备了自己的原型对象!

注意:自定义的构造函数中prototy属性指向的默认是一个{}空对象,原生js提供的构造函数中的prototype是提前定义好的,基本不会是一个空对象

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值