js基础

js中使用typeof能得到的哪些类型

变量类型 值类型VS引用类型
值类型:把每一个值都存储在一个位置

var a = 100
var b = a
b = 200
console.log(b) 

引用类型:两个值相互赋值,它只是把指针指向了该存储位置
对象/数组/函数
特点可以无限制的扩展属性

var a = {age:20}
var b = a
b.age = 21
console.log(a.age) //21

typeof 运算符详解

typeof undefined //undefined
typeof 'abc' //string
typeof 123 // number
typeof true // boolean
typeof {} // object
typeof [] // object
typeof null // object
typeof console.log // function

何时使用 三等号 何时使用 双等号

1.强制转换
  • 字符串拼接
  • 双等号运算符
  • if语句
  • 逻辑运算符

JS中有哪些内置函数

  • Object
  • Array
  • Boolean
  • Number
  • String
  • Function
  • Date
  • RegExp
  • Error

JS变量按照存储方式分为哪些类型,并描述其特点

  • 值类型
  • 引用类型

如何理解JSON

只不过是一个JS对象而已

JSON.stringfy({a:10,b:20})
JSON.parse('{"a":10,"b":20}')

原型和原型链

1.如何准确判断一个变量是数组类型
var arr = []
arr instanceof of Array
2.写一个原型链继承的例子
// 写一个封装DOM查询的例子
function Elem(id){
	this.elem = document.getElementById(id)
}
Elem.prototype.html = function (val) {
	var elem = this.elem
	if(val){
		elem.innerHTML = val
		return this
	}else{
		return elem.innerHTML
	}
}
Elem.prototype.on = function (type,fn){
	var elem = this.elem
	elem.addEventListener(type,fn)
}
var div1 = Elem('div1')
div1.html('<p>hello</p>')
div1.on('click',function(){
	aleart('clicked')
})
3.描述new一个对象的过程
  • 创建一个新对象
  • this指向这个新对象
  • 执行代码,即对this赋值
  • 返回this
4.zepto(或者其他框架)源码中如何使用原型链

知识点

  • 构造函数
function Foo(name, age) {
	this.name = name
	this.age = age
	this.class = 'class-1'
}
var f = new Foo('zhangsan', 20)
  • 构造函数 - 扩展
    var a = {} 其实是var a = new Object()的语法糖;
    var a = [] 其实是 var a = new Array() 的语法糖;
    function Foo(){…}其实是var Foo = new Function(…);
    使用instanceof判断一个函数是否是一个变量的构造函数;
  • 原型规则和示例
    5条原型规则
    原型规则是学习原型链的基础
    (1)所有的引用类型(数组/对象/函数),都具有对象特性,即可自由扩展属性(除了“null"以外)
    (2)所有的引用类型(数组/对象/函数),都有一个_proto_(隐式原型)属性,属性值是一个普通的对象
    (3)所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通对象
    (4)所有的引用类型(数组/对象/函数),proto(隐式原型)属性值指向它的构造函数的prototype(显式原型)属性
obj._proto_ === Object.prototype  //true

(5)当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的prototype)中寻找

// 构造函数
function Foo(name,age) {
	this.name = name
}
Foo.prototype.alertName = function () {
	alert(this.name)
}

//创建实例
var f = new Foo('zhangsan')
f.printName = function(){
   console.log(this.name)
}
// 测试
f.printName()
f.alertName()
  • 原型链
function Foo(name,age) {
	this.name = name
}
Foo.prototype.alertName = function () {
	alert(this.name)
}

//创建实例
var f = new Foo('zhangsan')
f.printName = function(){
   console.log(this.name)
}
// 测试
f.printName()
f.alertName()
f.toString() //要去f._proto_._proto_中查找
  • instanceof
    用于判断引用类型属于哪个构造函数的方法
    f instanceof Foo 的判断逻辑是:
    f的_proto_一层一层往上,能否对应到Foo.prototype
    再试着判断f instanceof Object
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值