js第一天学习整理

293 阅读5分钟
基本类型

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

image.png

内存,数据,变量三者之间的区别?
    内存是用来存储数据的空间
    变量是内存的标识
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()通过对象调用
          3new 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就是新建的对象(问题)
     注:函数执行的话,直接加()就可以完成执行调用了。