JS高级---基础总结深入
1. 基础总结深入
1.1数据类型
分类
- 基本数据类型(值类型)
- String:任意字符串
- Boolean:true,false
- Number:任意数字
- undefined:undefined
- null:null
- 对象数据类型(引用类型)
- 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有地址值
一块小内存有两个数据:
- 内部存储的数据
- 内存的地址值
内存分类:
- 堆:对象
- 栈:全局变量/局部变量
什么是变量?
可变化的量,由变量名和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据。
一些问题
- 关于赋值与内存的问题
var a = xxx; // a内存中保存的是什么东西?
// xxx 为基本数据,保存的就是这个数据
// xxx 为对象数据,保存的是对象数据所在内存的地址值
// xxx 是变量,保存的是xxx的内存数据,这个数据可能是基本数据,也可能是地址值
- 关于引用变量的赋值问题
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
- JS调用函数传递变量参数时,是值传递还是引用传递
理解1:都是值传递(基本值/地址值)
理解2:可能是值传递,也可能是引用传递(地址值)
var a = 3;
function fn(a){a = a + 1;
}
fn(a);
console.log(a); // 3
- JS引擎如何管理内存
- 内存生命周期
- 分配小内存空间,得到它的使用权
- 存储数据,可以反复进行操作
- 释放小内存空间
- 释放内存
- 局部变量:函数执行完自动释放
- 对象:成为垃圾对象==>垃圾回收器回收
- 全局变量:不会被释放和回收
var obj = {};
var a = 3;
obj = null/undefined; // 全局变量a,obj不会被释放,obj原本所指的对象会被垃圾回收机制自动回收
function fn(){var b = {};
}
fn(); // 执行完函数后,变量b将自动释放,b所指的对象将在后面的某个时刻被垃圾回收机制回收
1.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高级---基础总结深入相关推荐
- Node.js高级编程【一】node 基础
目录 一.Node 基础 1.课程概述 2.Node.js 架构 3.为什么是Node.js ? 4.Node.js 的 异步IO 5.Node.js 主线程是单线程 6.Node.js 应用场景 7 ...
- JS高级前端开发群加群说明
http://www.cnblogs.com/jikey/p/4426105.html JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年 ...
- JS高级前端开发群加群说明及如何晋级
一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在"前端开发"关键字搜索结果第一名.当然取得这样的成绩或这样一个结果也是情理之中,一方面来说,提倡的各种交流沟通方法大部分 ...
- Js 高级学习教程
一.Js 高级学习教程 1.Js BOM.DOM 基础概念 2.Js BOM 6大对象 3.Js 定时器使用 4.Js 本地存储 5.Js Dom 操作基本逻辑 6.Js Dom 事件注册 7.Js ...
- 妙味课堂ajax教程,妙味课堂JS高级专题篇视频资料分享
<妙味课堂JS高级专题篇视频教程>将向大家详细介绍javascript,javascript是一种直译式脚本语言,也是一种广泛用于客户端Web开发的脚本语言.目前,被数百万计的网页用来改进 ...
- JS高级+ES678
js高级 数据类型 基本(值)类型 Number: 任意数值 String: 任意文本 Boolean: true/false undefined: undefined null: null 对象(引 ...
- 【汇总】JS高级知识汇总
文章目录 前言 1.浏览器工作原理和V8引擎 2.JavaScript函数执行.作用域链以及内存管理 3.底层剖析JavaScript闭包执行以及内存模型.内存泄露 4.this的四个绑定规则及其细节 ...
- 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 ...
- 前端与移动开发----JS高级----面向对象编程,类与实例对象,继承,严格模式,模板字符串,class封装tab栏
JS高级01 回顾上阶段 Javascript组成 ECMAScript: 基础语法 (变量, 表达式, 循环, 判断, 函数, 对象等) DOM: document 操作标签(获取, 增加, 插入, ...
最新文章
- 【C++】google glog详解
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
- adaptiveThreshold函数
- html select选择事件_用 Java 拿下 HTML,分分钟写个小爬虫
- ORACLE的所有字段类型
- (四)Canvas API方法和属性汇总
- 2018深大计算机考研,深圳大学2018年硕士生招生复试分数线及调剂需求
- 台式计算机和笔记本计算机区别,【单选题】计算机的分类方法有多种,按照计算机的性能和用途分,台式计算机和笔记本计算机属于_________。...
- [Python] L1-042 日期格式化-PAT团体程序设计天梯赛GPLT
- 如何自学python知乎-马哥教育官网-专业Linux培训班,Python培训机构
- matlab搭配循环的函数按列将生成的数据写入文件
- 关于如何理解链表结构体指针引用LinkNode * L的问题
- jquery 使用文档
- 中国汉字一、二级字库的汉字与unicode编码(十六进制)对照表(收藏)
- MIUI主题风格_一种Android系统换肤功能的设计
- VS2013 设置背景图
- ps2021神经网络滤镜不能用,ps2021没法用神经元滤镜
- ONVIF学习笔记11:搜索设备不匹配问题排查
- MATLAB 向量和矩阵
- 浅谈php国际(I18N)以及config包的使用
热门文章
- 2021年最具影响力的七起网络安全事件
- vue2.0 实现tab标签切换效果 内容可以自行定义
- 如何找到自己喜欢的电子书|电子书搜索引擎介绍
- Google OR-Tools(一) Get Start
- 搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统
- [转载]SDL 用法,第 5 部分:Pirates Ho! 中界面设计的原则 - 简易性、一致性和引人入胜
- C语言农历天干地支,农历一百年算法(1921~2021)【C语言代码】
- 求数组中顺序子集和最大的值(详细图解)
- 自动售货机软件工程课设_软件工程_自动售货机
- Spring——DAO层、Spring JDBC、Spring事务控制