Javescript(持续补充...)
早期主要运行在浏览器端,用于表单验证以及动画的实现。随着js版本的升级,现在的js可以运行在nodejs上,而nodejs又可以安装在绝大多数的操作系统中,所以js可以运行在绝大多数的系统中,除了完成表单验证以及动画的实现还可以进行服务器端编程,甚至于硬件编程。
JavaScript ( JS ) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是为开发Web 页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,例如 Node.js
JavaScript 的标准是 ECMAScript 。截至 2012 年,所有的现代浏览器都完整的支持 ECMAScript 5.1,2015年6月17日,ECMA国际组织发布了 ECMAScript 的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为 ECMAScript 6 或者 ES6。
1.JavaScript中什么是基本数据类型什么是引用数据类型?以及各个数据类型是如何存储的?
基本数据类型
- Number:数字类型。整数/浮点数
- String:字符串类型,需要使用单引号或者双引号括起来
- Boolean:布尔类型,取值为 true/false,通常用于条件判断
- Null:空引用数据类型
- Undefined:未定义类型
- Symbol(ES6新增数据类型):表示独一无二的值
- bigInt:表示任意大的整数
引用数据类型
- Object:对象,由键值对组成,通过使用大括号将所有键值对括起来。
var dog = { name : 'Spot', breed : 'Dalmatian' };
- Array:数组,一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括起来。
var myNameArray = ['Chris', 'Bob', 'Jim']; var myNumberArray = [10,15,40];
- Date:日期对象
- Function:函数,函数是代码执行单元,用于实现某些特殊的功能。
-
function add(a,b){ return a + b; }
基本数据类型的数据直接存储在栈中;
而引用数据类型的数据存储在堆中,在栈中保存数据的引用地址,这个引用地址指向的是对应的数据,以便快速查找到堆内存中的对象。
栈内存是自动分配内存的;而堆内存是动态分配内存的,不会自动释放。所以每次使用完对象的时候都要把它设置为null,从而减少无用内存的消耗。
2.==
和===
有什么区别?
===是严格意义上的相等,会比较两边的数据类型和值大小
数据类型不同返回false;
数据类型相同,但值大小不同,返回false。
==是非严格意义上的相等
两边类型相同,比较大小;
两边类型不同,根据以下规则,再进一步进行比较。
Null == Undefined -> true
String == Number -> 先将String转为Number,在比较大小
Boolean == Number -> 现将Boolean转为Number,在进行比较
Object == String,Number,Symbol -> Object 转化为原始类型
3.深拷贝与浅拷贝
主要针对于引用数据类型参数说的,浅拷贝表示仅拷贝引用地址,深拷贝表示对于对象的克隆。
1.浅拷贝
var a = {name:"terry",age:12}
// 浅拷贝【地址拷贝】
var b = a;
b.age++;
console.log(a.age);
2.深拷贝
a.借用JSON对象的parse和stringify
function deepClone(obj){
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);
b.借用JQ的extend方法
c.递归
上一篇: css3属性之边框圆角、背景与渐变
下一篇: 迭代项目前端编码bug总结(持续补充)