Javascript重点总结

DOM

DOM节点

  • 文档节点   
  • HTML元素节点
  • 文本节点   
  • 属性节点
 文档节点HTML元素节点文本节点属性节点
nodeName#document标签名#text属性名

nodeValue

-undefined\null文本内容属性值
nodeType9132

DOM方法

DOM事件

JS变量类型

存储方式:值类型、引用类型([](数组), {} (Object) 都可以有自己的属性

JS的存储类型: boolean、number、string、object、function、undefined

ES6补充:Symbol类型

强制类型转换出现的场景:

  • ==:会发生类型转换   所以 100 == ‘100’ 是true
  • if语句,会把括号里的东西转换成boolean

if判断中为false的:if(0)、if(NaN)、if('')、if(null)、if(undefined)、if(false)

  • 逻辑运算符也会发生强制类型转换

何时使用===和==?

JS中的内置函数

补充:内置对象:Math,JSON

JSON

JSON是:JS对象、一种数据格式

常用的方法:

JSON.stringify({a:10, b:20}) // JSON转换为字符串
JSON.parse('{"a":10, "b":20}') //字符串转换为JSON格式

 

原型和原型链

  • 为什么JS有原型和原型链?

我的理解:JS构造函数的时候不能构造函数的内部方法,并且没有继承的关系,所以就要用原型和原型链来表示和使用函数的方法,并且便于继承

  • javascript的原型链有显式和隐式两种

显式原型链:即我们常见的prototype;

隐式原型链:在一般环境下无法访问,即不可见,在FireFox下可以通过__proto__方式访问;隐式原型链用于javascript引擎内部对原型链的搜寻,通过显示原型链来设置;

  • 每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance)都包含一个指向原型对象的内部 指针.

  • prototype和__proto__的概念

  prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象。它是显示修改对象的原型的属性(显式属性)。

  __proto__是一个对象拥有的内置属性(请注意:prototype是函数的内置属性,__proto__是对象的内置属性),是JS内部使用寻找原型链的属性。

      用chrome和FF都可以访问到对象的__proto__属性,IE不可以。

  • new 的过程
var Person = function(){};
var p = new Person();

   new的过程拆分成以下三步:
   (1) var p={}; 也就是说,初始化一个对象p
   (2) p.__proto__ = Person.prototype;
   (3) Person.call(p); 也就是说构造p,也可以称之为初始化p

关键在于第二步,我们来证明一下:

var Person = function(){};
var p = new Person();
alert(p.__proto__ === Person.prototype);

    这段代码会返回true。说明我们步骤2是正确的。

  • f.hasOwnProperty

  • 原型链
  • f instanceof Foo 判断是不是原型对象的实例

执行上下文

由于JS是一种解释性的语言,所以在代码执行之前,JS会把变量定义、函数声明先拿出来占个位置

 

前两行:变量提升hoisting  

变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

arguments

Array.prototype.slice.call(arguments) //将arguments转换成数组

this

this的各种使用场景:

//构造函数中的this

function Foo(name) {
    this.name = name
    return this
}

var f = new Foo('zhangsan')

//作为一个对象属性的this

var obj = {
    name : 'A',
    printName: function() {
        console.log(this.name)
    }
}
obj.printName()

//普通函数的this
function fn() {
    console.log(this)
}
fn() //打印出来的是window,即全局变量

//call apply bind中的this
function fn1(name, age){
    console.log(name)
    console.log(this)
}
fn1.call({x:100},'zhangsan',20)
fn1.apply({x:200},['zhangsan',20])

var fn2 = function(name, age){
    console.log(name)
    console.log(this)
}.bind({y:200})
fn2('zhangsan', 20)

call、apply、bind的作用是改变函数运行时的上下文,bind在使用后会返回一个新的函数供我们使用

即可以实现继承!!!!!!!!

fun.apply(thisArg, [argsArray])

fun.call(thisArg, arg1,arg2, ...)

作用域

JS没有块级作用域,有的是函数作用域和全局作用域

当前作用域没有定义的变量,叫做“自由变量”

函数在哪定义,函数的父级作用域就在哪

作用域链:一个变量一直往上寻找它的父级作用域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Algorithm_goddness

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值