js面试题

值类型与引用类型

var  a = 15;  // 值类型
var   b = a; //把a的值赋值给 b
b = 50;
// console.log(a);//a //15
var d = {age:18};  //d是引用类型 栈key与内存地址  真正的值存储在堆中
var e =d;  // 把d的引用地址赋值给e (e与d都指向同一块内存储地址)
e.age = 35;
console.log(d.age);// 35

值类型与引用类型的区别

  1. 值类型key与value都存储在js内存栈中
  2. 引用类型key存储在栈中 ,真正的值存储在堆中
  3. 把引用类型赋值给一个变量其实是不引用类型的地址指向变量

数据类型

值类型

String字符
Number数字
Boolean布尔
undefined未定义
null空(特殊)
Symbol符号

引用类型

Object对象
Array数字
Function函数
Map图
Set集合

判断数据类型方法

 function getType(obj){
			 // Object对象 protype原型.toString转换为字符串  slice分割 从第8位到-1位
			 return Object.prototype.toString.call(obj).slice(8,-1);
		 }

深拷贝、浅拷贝、递归

浅拷贝

只拷贝值类型,引用类型数据还是指向地址

  1. Object.assign(A,B)
  2. for in遍历拷贝
  3. {…A}对象扩展

深拷贝

		// js 递归
		// 递归就是函数自己调用自己,一点要有结束条件
		// 需求  从1+2+..5;  1+2+3+4+5=15
		function add(n){
		// 如果n是1直接返回(递归函数的结束条件)
		if(n==1){return 1};
		return n+add(n-1);
	}
	// alert(add(5)) //15
	// 斐波拉契数列 
	// 求斐波拉契第n为数的数列
	// 下一个数等于前面两个数之和,第0位和第1位返回的是1
	// 1,1,2,3,5,8,13,21,34,55,89
	function fib(n){
		// 如果是第0位返回1 如果是第1位返回1
		if(n==0||n==1){return 1}
	else{
		// 如果其他位 返回 前面两个数的和
		return fib(n-1)+fib(n-2);
	}
}
// alert(fib(41));

逻辑且或

|| 为或,如果前面的变量为truely 最终的结果为第一个,如果为falely结果为第二个

var a  = 15 ||0; 
alert(a);

&&为且,前面是truely变量则返回后面的值,前面是falsely变量直接使用前面的值

var c = 15&&20; 
alert(c);
var c = false&&18;
alert(c);

原型、原型链

什么是原型?什么是原型链?

每个构造函数(class)都有一个显示的原型prototype
每个实例对象都有个隐私原型__proto__
实例的隐式原型__proto__等于其构造函数的显示原型protype
当查找一个对象的属性或方法时先在实例上查找,找不这沿着__proto__向上逐级查找
我们把__proto__的__proto__形成的链条关系成为原型链

原型与原型链的作用

  1. 在js中实现继承
  2. 实现类的实例方法扩展

在这里插入图片描述

严格等于和等于

==

判断隐式转换后的值

===

判断类型与值是否相对
应该在任何时候都使用 === 当判断是否为null或者为undefined可以为特例)

if判断

if()中判断的是否为truely变量
falsely变量:false “” 0 NaN undefined null
两次取反 !!a得到结果为false
除了falsely变量其他都为truely变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值