基本类型
string
number
null
undefind
boolean
对象类型
Object(存储数据)
Function(可执行代码)
Array(连续数值下标操作数据)
2.关键字
1、typeof
(无法确定 null 和 undefined object array )
typeof 返回数值类型的字符串类型表达(首字符小写)
var a
console.log(a,typeof a,typeofa === 'undefined',a===undefined)//undefined 'undefined' true true
console.log(typeof p1.p2) //'object'
null类型的差别
a = null
console.log(typeof a) //'object'
console.log(a==='null')//true
2、instanceof 判断对象的具体类型)实例
let b1{
b2:['tianze','tianze1','tianze']
b3:function(){
console.log('b3')
return function(){
return 'tianze'
}
}
}
console.log(b1 instanceof Object)true
console.log(b1.b2 instanceof Object, b1.b2 instanceof Array) //true true
console.log(b1.b3 instanceof Function,b1.b3 instanceof Object //true true
console.log(typeof b1.b3 === 'function'
(确定返回值的数据类型)
console.log(b1.b3()())//'tianze'
3、===(全等,不进行类型转换)
let a = null
let b
//判断 null 和 undefined的类型
console.log(a===null)//true
console.log(a===undefined)//true
1、undefined 和 null的区别
undefined 声明(变量)了但是没有赋值
null 声名了变量但是赋值为null
2、什么时候将值设置为null
var person = null
将person赋值为对象,区别基本数据类型
person1:['tianze','tianze','tianze']
person1 = null
改变person指向为null(等待垃圾回收器回收)
3、什么是数据?
存储在内存中代表特定数据的'xx',本质是010101
数据的特点:可传递,可运输
一切皆数据
内存中所有操作的目标:数据
算术运算
逻辑运算
赋值
运行函数
4、什么是内存
内存条通电以后产生的可存储数据的空间(临时的)
内存产生和死亡:
内存条(电路板)=>通电=>产生内存空间=>存储数据=>处理数据=>断电=>内存空间和数据都消失
一块小内存的两个数据:
-内部存储的数据
-地址值数据
内存分类
-栈:全局变量和局部变量,(函数名)
-堆:对象,(函数也是对象)
5、什么是变量
可变化的量,由变量名和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
var obj = {name:'tianze}
var a= obj
内存,数据,变量三者之间的区别?
内存是用来存储数据的空间
变量是内存的标识
1、var a = xxx a内存存放的的到底是什么数据类型
xxx是基本数据类型,保存的就是这个数据
xxx是对象,保存的对象就是地址值
xxx是变量,保存的xxx的内存的内容(可能是基本数据类型,也可能是引用数据类型)
var a = 3
a = function(){
}
var b = 'abc'
a=b
b={}
a=b
关于变量赋值问题
n个引用变量指向同一个对象,通过一个变量修改内部的数据,其他所有变量看到的都是修改后的数据
var a = {age:12}
var b = a
a = {name:'BOB',age:13}
console.log(b.age,a.name,c.age)//12 BOB 13
function fn2(obj){
obj = {age:25}
}
fn2(a)
//函数作用域,在当前函数执行完,内部的数据都会设置为垃圾数据(对象)=>null
//这个obj = a <==> fn2(a) 指向{age:12}
// obj = {age:13} 是改变了 obj的指向 ==>{age:13} fn2()将函数变量设置为垃圾对象
console.log(a.age)
问题1、在js调用函时传递变量参数时,是值传递还是引用传递。
值(基本数据/引用数据)传递
var a = 3
function fn(a){
a = a+1
}
fn(a)
console.log(a)//3
//感觉这个就是一个作用域的问题
2、js引擎是如何管理内存的
1、内存的生命周期
分配内存空间,得到他的使用权
存储数据,可以反复进行操作
释放小内存空间
2、释放内存 对象:先成垃圾对象(null)没有任何数据的引用,等待垃圾回对象回收 局部变量:函数执行完成,自动对象
3、对象、函数
1、什么是对象
多个对象数据的封装体
用来保存多个数据的容器
一个对象代表显示中一类的事物
2、为什么使用对象?
方便管理多个数据
3、对象的组成
属性:属性名(字符串=>默认不需要加'')+属性值(任意类型)
方法:一种特殊的属性(属性值是函数)
4、如何访问对象内部的数据
.属性名
1、['属性名'] =>存在特殊字符
2、变量名不确定(变量名)
var propName = 'TianZe'
var value = 18
p.propName = value //是添加一个新的属性propName
p[propName] = value //将value 赋值给 propName
什么是函数?
1、具有特点功能的封装体
2、提高代码的复用
3、方便代码阅读
函数定义:
函数声明式:function fn(){}
字面量表达式:var fn = function(){}
函数执行:
1、直接调用
2、obj.func()通过对象调用
3、new func() 通过new调用
4、txt.call/apply(obj) //临时让apply成为obj的方法进行调用
回调函数:
定义:定义了函数,没有调用,但是执行了。
常见的回调函数:dom事件、定时器回调函数、
ajax请求回调函数
生命周期回调函数
IIFE(全称 Immediately Invoked Function Expression)立即执行函数
作用:
1、隐藏实现
2、不会污染外部命名空间(一般为全局)
3、用于写js模块,通过匿名函数向外暴露数据(有java 私有变量的味道了)
代码实现:
;(function(){
var a =1
function text(){
console.log(++a)
}
window.$ = function(){ //向外暴露一个属性 $ $是一个函数,函数的返回值
return {
text:text //返回就是function text 保存在text中
}
}
})()
$().text()
函数中的this
1、函数内部都有一个变量this arguments(当前只学习到这俩个)
2、函数本质是通过对象来调用的。没有指定就是window
:this就是调用当前函数的当前对象
function Person(color){
console.log(this)
this.color = color
this.getColor = function(){
console.log(this)
return this.color
}
this.setColor = function(){
this.color = color
this.color = color
}
}
Person(red) //this是window
var p = new Person('yellow')//this p
p.getColor() //this Person
var obj = {}
p.setColor.call(obj,'block')//this 是obj
var test = p.setColor()
test() //this window
function fun1(){
function fun2(){
cosolr.log(this);
}
}
fun1() //this 是window
new text(); //this就是新建的对象(问题)
注:函数执行的话,直接加()就可以完成执行调用了。