1. 基础总结深入

1.1数据类型

分类

  1. 基本数据类型(值类型)
  • String:任意字符串
  • Boolean:true,false
  • Number:任意数字
  • undefined:undefined
  • null:null
  1. 对象数据类型(引用类型)
  • Object:任意对象
  • Function:一种特别的对象(可以执行)
  • Array:一种特别的对象(数值下标,内部数据是有序的)

判断

  • typeof : 可以判断number/string/boolean/undefined/function,不能判断null和object,object和array。
  • instanceof:判断对象的具体类型
  • ===:可以判断undefined,null
var a;
// 返回数据类型的字符串形式
console.log(a,typeof a,typeof a === 'undefined',a === undefined)    // undefined,'undefined',true,true
a = null;
console.log(typeof a,a === null);    // 'object',true
var b = {b2:[1,'abc',console.log],b3:function(){console.log('b3')}
}
console.log(b instanceof Object,b instanceof Array);    // true,false
console.log(b.b2 instanceof Array,b.b2 instanceof Object);  //true,true
console.log(b.b3 instanceof Function,b.b2 instanceof Object);   //true,true
console.log(typeof b.b3,typeof b.b2,typeof b);  // 'function','object','object'

三个问题

  • undefined和null的区别?
// undefined代表定义未赋值,null代表定义赋值为null
var a;
console.log(a); // undefined
a = null;
console.log(a); // null
  • null的使用方式?
// 起始,表明要赋值变量为对象
var a = null;
// 确定对象内容再赋值
a = ['zut',2023];
// 最后,回收对象
a = null;  // 断开a与对象的引用关系,使对象变成垃圾对象(被垃圾回收器回收)
  • 怎么区别变量类型与数据类型
// 数据类型:基本类型,对象类型
----------------------------------------------
// 变量类型(变量内存值的类型):基本类型,引用类型
// 基本类型:保存是基本类型的数据
// 引用类型:保存是地址值

1.2数据-变量-内存

什么是数据?

存储在内存中的代表特定信息的东西,本质上是’010101’

数据的特点:可传递,可运算

什么是内存?

内存条通电后产生的可以储存数据的空间(临时的数据)

内存产生和死亡:内存条(电路板)=> 通电 => 产生内存空间 => 存储数据 => 处理数据 => 关电 => 内存空间和数据都消失

每块内存都有地址值,但是仅内存中的数据是对象时才使用到地址值:

var a = {name:'牛伟豪'};  // a读取的是对象内存的地址值
var b = a; // b读取的是a内存中保存的数据,而不读取a内存的地址值,尽管a有地址值

一块小内存有两个数据:

  1. 内部存储的数据
  2. 内存的地址值

内存分类:

  1. 堆:对象
  2. 栈:全局变量/局部变量

什么是变量?

可变化的量,由变量名和变量值组成

每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据。

一些问题

  1. 关于赋值与内存的问题
var a = xxx; // a内存中保存的是什么东西?
// xxx 为基本数据,保存的就是这个数据
// xxx 为对象数据,保存的是对象数据所在内存的地址值
// xxx 是变量,保存的是xxx的内存数据,这个数据可能是基本数据,也可能是地址值
  1. 关于引用变量的赋值问题

n个引用变量指向同一个对象,其中的任意一个变量修改对象内部值,其他变量看到的都是修改后的数据

2个引用变量指向同一个对象,其中的一个变量指向另一个对象,另一个变量依然指向前一个对象

var obj1 = {name:'牛伟豪'},
var obj2 = obj1;
obj2.age = 18;
console.log(obj1.age);  // 18
function fn(obj){   // obj2保存的内容(该内容是对象的地址值)传给了objobj.name = 'Tom';
}
fn(obj2);
console.log(obj1.name); // Tom
------------------------------------------------
var a = {age:11};
var b = a;
a = {name:'zut',age:12};
console.log(a.name,a.age,b.age);    // zut,12,11
-----------------------------------------------
var a = {age:18};
function fn(obj){obj = {age:20};
}
fn(a);
console.log(a.age); // 18
  1. JS调用函数传递变量参数时,是值传递还是引用传递

理解1:都是值传递(基本值/地址值)

理解2:可能是值传递,也可能是引用传递(地址值)

var a = 3;
function fn(a){a = a + 1;
}
fn(a);
console.log(a); // 3
  1. JS引擎如何管理内存
  • 内存生命周期
  1. 分配小内存空间,得到它的使用权
  2. 存储数据,可以反复进行操作
  3. 释放小内存空间
  • 释放内存
  1. 局部变量:函数执行完自动释放
  2. 对象:成为垃圾对象==>垃圾回收器回收
  3. 全局变量:不会被释放和回收
var obj = {};
var a = 3;
obj = null/undefined;  // 全局变量a,obj不会被释放,obj原本所指的对象会被垃圾回收机制自动回收
function fn(){var b = {};
}
fn();   // 执行完函数后,变量b将自动释放,b所指的对象将在后面的某个时刻被垃圾回收机制回收

1.3对象

什么是对象?

用来保存多个数据的容器

为什么要用对象?

统一管理多个数据

对象的组成

属性:属性名(字符串)和属性值组成

方法:一种特别的属性(属性值是函数)

如何访问对象内部数据?

  1. 通过 .属性 访问,使用方便,但不通用
  2. 通过 [’属性‘] 的方式访问,使用麻烦,但通用
  3. 当属性名有-或空格等特殊字符时,或者属性是一个变量时应该用【“属性”】

1.4函数

什么是函数

一些实现具体作用的代码封装体

函数的作用

提高代码复用

函数如何声明

// 函数声明
function fn(){...
}
// 表达式
var fn = function(){...
}

函数如何调用

function fn(){...
}
fn();   // 直接调用
obj.fn();   // 在对象里调用
new fn();   // 通过new调用
fn.call/apply(obj)  //临时调用,obj里并没有fn函数,此时只是临时调用,并把fn函数里的this指向obj作用域

回调函数

你定义的函数没有主动调用却可以执行的函数

document.getElementById('btn').onclick = function(){...   // dom事件回调函数
}
setTimeout(()=>{... // 定时器回调函数
},2000)

立即执行函数(IIFE)

创建独有的函数作用域,函数里的变量不会污染外部命名空间

(function(){ // 匿名函数自调用...
})()

函数中的this

this是什么?

任何函数本质上都是通过某个对象调用的,所有函数内部都有一个变量叫this,它的值是调用函数的当前对象。如果没有直接指定就是window

如何确定this的值

test()==>window

p.test()==>p

new test()==>实例对象

test.call(obj)==>obj

JS高级---基础总结深入相关推荐

  1. Node.js高级编程【一】node 基础

    目录 一.Node 基础 1.课程概述 2.Node.js 架构 3.为什么是Node.js ? 4.Node.js 的 异步IO 5.Node.js 主线程是单线程 6.Node.js 应用场景 7 ...

  2. JS高级前端开发群加群说明

    http://www.cnblogs.com/jikey/p/4426105.html JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年 ...

  3. JS高级前端开发群加群说明及如何晋级

    一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在"前端开发"关键字搜索结果第一名.当然取得这样的成绩或这样一个结果也是情理之中,一方面来说,提倡的各种交流沟通方法大部分 ...

  4. Js 高级学习教程

    一.Js 高级学习教程 1.Js BOM.DOM 基础概念 2.Js BOM 6大对象 3.Js 定时器使用 4.Js 本地存储 5.Js Dom 操作基本逻辑 6.Js Dom 事件注册 7.Js ...

  5. 妙味课堂ajax教程,妙味课堂JS高级专题篇视频资料分享

    <妙味课堂JS高级专题篇视频教程>将向大家详细介绍javascript,javascript是一种直译式脚本语言,也是一种广泛用于客户端Web开发的脚本语言.目前,被数百万计的网页用来改进 ...

  6. JS高级+ES678

    js高级 数据类型 基本(值)类型 Number: 任意数值 String: 任意文本 Boolean: true/false undefined: undefined null: null 对象(引 ...

  7. 【汇总】JS高级知识汇总

    文章目录 前言 1.浏览器工作原理和V8引擎 2.JavaScript函数执行.作用域链以及内存管理 3.底层剖析JavaScript闭包执行以及内存模型.内存泄露 4.this的四个绑定规则及其细节 ...

  8. Vue.js 框架基础笔记

    Vue.js 框架基础笔记 1. Vue.js 基本概念 1.1 遇见 Vue.js 1.1.1 为什么要学习 Vue.js 1.1.2 前端开发的复杂化 1.1.3 Vue.js 特点 1.1.4 ...

  9. 前端与移动开发----JS高级----面向对象编程,类与实例对象,继承,严格模式,模板字符串,class封装tab栏

    JS高级01 回顾上阶段 Javascript组成 ECMAScript: 基础语法 (变量, 表达式, 循环, 判断, 函数, 对象等) DOM: document 操作标签(获取, 增加, 插入, ...

最新文章

  1. 【C++】google glog详解
  2. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
  3. adaptiveThreshold函数
  4. html select选择事件_用 Java 拿下 HTML,分分钟写个小爬虫
  5. ORACLE的所有字段类型
  6. (四)Canvas API方法和属性汇总
  7. 2018深大计算机考研,深圳大学2018年硕士生招生复试分数线及调剂需求
  8. 台式计算机和笔记本计算机区别,【单选题】计算机的分类方法有多种,按照计算机的性能和用途分,台式计算机和笔记本计算机属于_________。...
  9. [Python] L1-042 日期格式化-PAT团体程序设计天梯赛GPLT
  10. 如何自学python知乎-马哥教育官网-专业Linux培训班,Python培训机构
  11. matlab搭配循环的函数按列将生成的数据写入文件
  12. 关于如何理解链表结构体指针引用LinkNode * L的问题
  13. jquery 使用文档
  14. 中国汉字一、二级字库的汉字与unicode编码(十六进制)对照表(收藏)
  15. MIUI主题风格_一种Android系统换肤功能的设计
  16. VS2013 设置背景图
  17. ps2021神经网络滤镜不能用,ps2021没法用神经元滤镜
  18. ONVIF学习笔记11:搜索设备不匹配问题排查
  19. MATLAB 向量和矩阵
  20. 浅谈php国际(I18N)以及config包的使用

热门文章

  1. 2021年最具影响力的七起网络安全事件
  2. vue2.0 实现tab标签切换效果 内容可以自行定义
  3. 如何找到自己喜欢的电子书|电子书搜索引擎介绍
  4. Google OR-Tools(一) Get Start
  5. 搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统
  6. [转载]SDL 用法,第 5 部分:Pirates Ho! 中界面设计的原则 - 简易性、一致性和引人入胜
  7. C语言农历天干地支,农历一百年算法(1921~2021)【C语言代码】
  8. 求数组中顺序子集和最大的值(详细图解)
  9. 自动售货机软件工程课设_软件工程_自动售货机
  10. Spring——DAO层、Spring JDBC、Spring事务控制