深入探讨JS高级1---基础总结深入

基础总结深入

  1. 数据类型
    a.分类
    基本类型(又称值类型):
    String (任意字符串)
    Number (任意数字)
    boolean (true/false)
    undefined (undefined)
    null (null)
    对象类型(又称引用类型):
    Object (任意对象)
    Function (一种特殊的对象,可以执行)
    Array (一种特殊的对象,数值下标,内部数据有序)
    b.判断
    typeof (返回数据类型的字符串表达)
    可以判断:undefined/数值/字符串/布尔值/function
    不能判断:null与Object Object与Array
    instanceof(判断对象的具体类型,返回布尔值)
    绝对等于符号(===)
    可以判断undefined,null
<script type="text/javascript">
		//1.基本
		var a;
		console.log(a,typeof a,typeof a === 'undefined',a === undefined);//undefined 'undefined' true true
		console.log(undefined === 'undefined');//false
		
		a = 4;
		console.log(typeof a === 'number'); //true
		a = 'cxq';
		console.log(typeof a === 'string'); //true
		a = true;
		console.log(typeof a === 'boolean'); //true
		a = null;
		console.log(typeof a,a === null); //'object' true
		
		//2.对象
		var b1 = {
			b2: [1,'abc',console.log],
			b3: function(){
				console.log('b3');
				return function(){
					return 'cxq';
				}
			}
		}
		
		console.log(b1 instanceof Object,b1 instanceof Array); //instance实例的意思 true false
		console.log(b1.b2 instanceof Array,b1["b2"] instanceof Object);
		console.log(b1.b3 instanceof Function,b1.b3 instanceof Object);
		
		console.log(typeof b1.b2,'-----'); //'object'
		
		console.log(typeof b1.b3 === 'function'); //true
		
		console.log(typeof b1.b2[2] === 'function'); //true
		b1.b2[2](4);
		console.log(b1.b3()());
		
	</script>

c.相关问题
undefined和null的区别?
undefined代表定义了未赋值,null代表定义并赋值了,只是值为null

什么时候给变量赋值为null?
初始赋值:表示将要赋值为对象
结束前赋值:让对象成为垃圾对象,进而被回收

严格区分变量类型与数据类型?
变量的类型实质上指的是变量内存值的类型,基本类型保存的就是基本类型的数据,引用类型保存的是地址值。JS是弱类型的语言,变量本身是没有类型的,我们所讨论的类型其实是变量所保存的数据的类型,只是平时不加区分就是说的变量的类型

<script type="text/javascript">
		//实例:实例对象
		//类型:类型对象
		function Person(name,age){  //构造函数 类型
			this.name = name;
			this.age = age;
		}
		var p = new Person('tom',12); //根据类型创建的实例对象
		
		//Person('jack',13);
		
		var a;
		console.log(a); //undefined
		a = null;
		console.log(a); //null
		
		var b = null;  //初始赋值为null 表明将要赋值为对象
		b = ['1','2']; //确定对象就赋值
		b = null;      //让b指向的对象成为垃圾对象(被垃圾回收器回收)
		//b = 2;  同样可以切断那条线,但是没有意义
	</script>

d.数据_变量_内存
什么是数据?
存储在内存中代表特定信息的载体,本质上是010101…,特点可传递,可运算

什么是变量?
由变量名和变量值组成的可变化的量。每个变量都对应一块小内存,变量名用来查找对应的内容,变量值就是内存中保存的数据

什么是内存?
内存条通电后产生的可存储数据的临时空间。一块小内存有2个数据:内存存储的数据、地址值
内存的分类
栈:存储全局变量和局部变量
堆:存储对象

三者之间的关系?
内存是用来存储数据的空间,变量是内存的标识,我们通过变量找到对应的内存,进而操作内存中的数据
e.相关问题
关于赋值和内存的问题:var a = xxx,a内存中到底保存的是什么?
xxx是基本数据,保存的就是这个数据
xxx是对象,保存的是对象的地址值
xxx是变量,保存的是变量的内存内容(可能是基本数据,也可能是地址值)

关于引用变量赋值问题
n个引用变量指向同一个对象,通过某个变量修改对象内部数据,其他所有变量看到的是修改之后的数据
2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象

<script type="text/javascript">
		var obj1 = {name: 'Tom'};
		var obj2 = obj1;
		obj2.age = '12';
		console.log(obj1.age); // '12'
		
		function fn(obj){
			obj.name = 'A';
		}
		
		fn(obj1);
		
		console.log(obj2.name) //'A'
		
		var a = {age: 12};
		var b = a;
		a = {name: 'Tom',age: 13};
		b.age = 14;
		console.log(b.age,a.name,a.age); // 14 'Tom' 13
		
		//执行形参赋值 obj = a,这是两个同时指向了对象{age:13,name:'Tom'}
		//然后执行obj = {age: 15}注意是等于,不是.,就是obj指向了新的对象{age: 15}
		//不再指向a指向的对象,两个互不干涉
		function fn2(obj){
			obj = {age: 15};
		}
		
		fn2(a);
		console.log(a.age); //13
	</script>

在JS调用函数时传递变量参数,是值传递还是引用传递?
理解1:都是值传递,传递的是基本数据类型的值或者对象的地址值
理解2:可能是值传递,也可能是引用传递,基本数据类型就是值传递,对象类型是引用传递,传递的是地址值

<script type="text/javascript">
		var a = 3;
		//值传递,相当于执行 a = 3,先读取全局变量a的值3,再赋值给形参a
		//传递的参数是3,跟全局变量a没有关系了,所以全局a还是3,为什么要用两个a嘛
		//我故意混淆的
		function fn(a){
			a = a + 1;
		}
		fn(a);
		console.log(a); //3
	</script>

JS引擎如何管理内存?
内存生命周期:
分配小内存空间—>得到它的使用权—>存储数据,可以反复进行操作—>释放小内存空间
释放内存:
局部变量:函数执行完后自动释放
对象:成为垃圾对象---->垃圾回收器回收

f.对象
什么是对象?
多个数据的封装体
用来保存多个数据的容器
一个对象代表现实中的一个事物

为什么要用对象?
统一管理多个数据

对象的组成?
属性:属性名(字符串)加属性值(任意值)组成
方法:一种特别的属性(属性值是函数)

如何访问对象内部数据?
对象名.属性名
对象名[‘属性名’]

什么时候必须使用对象名[‘属性名’]的方式?
属性名包括特殊字符:-,空格
属性名不确定的时候

<script type="text/javascript">
		var p ={};
		//p.content-type = 'text/json';  报错
		p['content-type'] = 'text/json';
		console.log(p['content-type']);
		
		var propName = 'myAge';
		var value = 18;
		p[propName] = value;
		console.log(p[propName]);
	</script>

g.函数
什么是函数?
实现特定功能的n条语句的封装体,只有函数是可以执行的,其他类型的数据不能执行

为什么要用函数?
提高代码复用,便于阅读复用

如何定义函数?
函数声明
表达式

如何调用(执行)函数?
test() 直接调用
obj.test() 通过对象调用
new test() 构造函数调用
test.apply(obj)/test.call(obj) 在指定对象上调用,临时让test成为obj的方法进行调用

<script type="text/javascript">
		function fn(){ //函数声明
			
		}
		
		var fn1 = function(){}  //表达式声明
		
		function fn2(){
			this.xxx = 'cxq';
		}
		var obj = {};
		//obj.fn2()  不能直接调用,因为根本就没有
		fn2.call(obj);  //可以让函数成为指定任意对象的方法进行调用
		console.log(obj.xxx);
	</script>

回调函数
什么是回调函数?
你定义了
你没有调
但最终它执行了

常见的回调函数
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数

IIFE(Immediately-Invoked Function Expression) 立即执行函数表达式,又称匿名函数自调用
作用
隐藏实现
不会污染外部(全局)命名空间
用来编写JS模块

<script type="text/javascript">
		(function(){
			var a = 3;
			console.log(a + 3);
		})();  //匿名函数自调用
		var a = 4;
		console.log(a);
		
		
		(function(){
			var a = 1;
			function test(){
				console.log(++a);
			}
			window.$ = function(){   //向外暴露一个全局函数
				return {
					test: test
				}
			}
		})();
		$().test();  //$是一个函数,$执行后返回一个对象,对象有test这个方法
	</script>

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

如何确定this的值?
this只有在函数调用的时候才会发生绑定,谁调用的这个函数,函数中的this就指向谁
好了,我的分享就到这里了,谢谢大家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值