JavaScript Day01 初识JavaScript 3

简介: JavaScript Day01 初识JavaScript

-数值范围:

由于内存的限制,ECMAScript不能保存世界上所有的数值。


ECMAScript能表示的最小数值保存在Number.MIN_VALUE中


能表示的最大的数值保存在Number.MAX_VALUE中。


如果某次计算的结果超过了JavaScript数值范围,将会返回Infinity(正无穷)或者-Infinity(负无穷)

var a = 9/0;   // Infinity
Number.MIN_VALUE    5e-324
Number.MAX_VALUE   1.7976931348623157e+308

-数值范围检测:

使用 isFinite()函数可以判断参数是否在最大值和最小值之间,如果在,返回true

var a = isFinite(9/0);  // false

-布尔 Boolean

布尔(逻辑)只能有两个值:true 或 false。

var x=true;
var y=false;

-Null

该类型的取值只有一个,即null。null可以表示一个空对象的指针。

var a = null;

如果一个变量准备将来保存对象,可以将该变量初始化null而不是其他,这样可以通过检查null值就可以知道


相应的变量是否已经保存了一个对象的引用。

if(car !== null ){  //car对象执行某些操作}

-Undefined

Undefined 这个值表示变量不含有值。未定义的。

var a;
console.log(a,typeof a);//undefined 'undefined'
var a = undefined;
console.log(a,typeof a);//undefined 'undefined'

-undefined 与null关系

undefined继承null,所以undefined == null结果为true,但是null表示空对象,undefined表示未定义;


null与undefined用途不同,null可以用来表示一个空对象,但是没有必要把一个变量的值显式设置为undefined。

//null vs undefined
console.log(undefined == null); //true  //undefined派生自null
console.log(undefined === null);//false
if(null == undefined){console.log('相等的')}
if(null === undefined){console.log('完全相等')}
// ==, 等同  的意思, 两边值类型不同的时候,要先进行类型转换为同一类型后,再比较值是否相等。 
// ===,恒等  的意思, 不做类型转换,类型不同的结果一定不等。
// "=="表示只要值相等即可为真,而"==="则要求不仅值相等,而且也要求类型相同。
// 建议:尽量使用严格运算符 ===。因为"=="不严谨,可能会带来一些违反直觉的后果。

5.2 引用数据类型

在js中除了以上基本数据类型,其他所有类型都可以归结为引用数据类型。


-对象Object

对象是模拟现实生活的对象,对象由键值对组成,通过使用大括号将所有键值对括起来。

var dog = {
  name: 'momo',
  age: 4
}

可以通过点语法获取对象的属性

dog.name; //momo
dog.age;  //age

-数组Array

数组是一个特殊的对象,包含了多个值,值与值之间使用逗号分隔开,所有的值通过中括号括起来。

var classArr = ['web2104','web2105','web2106']
var studentArr = ['zhangsan','lisi','wangwu']

可以通过数组下标获取对应的数据

classArr[0]; // web2104

-函数Function

函数是代码执行单元,用于实现某些特殊的功能。

function sum(a, b) {
  return a + b;
}
//执行函数
sum(1,2); // 3

5.3 -基本数据类型和引用数据类型在内存中如何存储

-基本数据类型

基本数据类型变量都维护在栈区,基本数据类型的值保存在栈区。


例如:

var a = 123;
b = a;
a = 456;

1.var a = 123; b = a;基本数据类型是在栈内存中存储的,如下图,b = a的时候,b直接把a的值存进去


ddd8865a66cb4c7e814923ddf565c15b.png


2.a = 456; 会把a的值改为456,但是对b没有任何影响,所以最后会输出a = 456;b = 123;

964b90578de44f4fb294ddb1ba545854.png


结论:基本数据类型的值存在栈,值与值之间独立存在,修改一个值不会影响其他变量


-引用数据类型

引用数据类型的引用地址保存在栈区,值保存在堆区。


例如:

var obj = {
  name: 'zhangsan'
}
var obj1 = obj; //将对象obj赋值给对象obj1
console.log(obj.name);  //zhangsan
console.log(obj1.name); //zhangsan
// 修改obj的name
// 当obj属性name变为"lisi"时,obj1属性name也变为"lisi"
obj.name = 'lisi';
console.log(obj.name);  //lisi
console.log(obj1.name); //lisi

6e6f8c3be5034da4b33b768891cdacda.png


-结论:当栈存放引用类型时,值为对象的地址,obj与obj1指向同一个地址,所以当obj的name值变为“lisi”时,obj1也会发生变化


5.4 深拷贝与浅拷贝

主要针对于引用数据类型参数说的,浅拷贝表示仅拷贝引用地址,深拷贝表示对于对象的克隆。


-实现浅拷贝的方法

递归的方式实现浅拷贝

Object.assign()实现浅拷贝

展开运算符…实现浅拷贝

Array.prototype.slice()实现浅拷贝

Array.prototype.contact()实现浅拷贝

-实现深拷贝的方法

通过json对象实现深拷贝(JSON.stringify,JSON.parse)

lodash函数库实现深拷贝

递归的方式实现深拷贝

等等

具体实现深浅拷贝的方法我之前有总结过


JS 浅拷贝和深拷贝


6. 类型判断

在实际开发中,我们经常要判断一个变量的数据类型。


typeof

使用typeof判断数据类型

返回该变量名所指向数据的类型

语法: typeof 变量名

返回值如下:

“undefined” 未定义

“boolean” 布尔类型

“string” 字符串

“number” 数值

“object” 对象或者null或者数组

“function” 函数


通过typeof可以判断一个变量的类型


var a = 3;
typeof a;  // number
if((typeof a) == "string"){}
if(a == "null"){}
if(a == null){}

isNaN

判断是否是 不是一个数字

var a = 10/'a';
isNaN(a);    //true

isFinite

判断是否是一个有效值

var a = 10/0 ;
isFinite(a)   // false
目录
相关文章
|
JavaScript 前端开发
70.【JavaScript 6.0】(八)
70.【JavaScript 6.0】
53 1
|
JavaScript 前端开发
70.【JavaScript 6.0】(一)
70.【JavaScript 6.0】
56 0
|
6月前
|
JavaScript 前端开发 数据处理
你好,JavaScript!
你好,JavaScript!
29 2
|
7月前
|
存储 JavaScript 前端开发
JavaScript
【4月更文挑战第21天】JavaScript
49 5
|
XML JavaScript 前端开发
javascript之webAPIs(1)
javascript之webAPIs(1)
70 0
|
7月前
|
存储 前端开发 JavaScript
JavaScript中你不知道的数学方法 (非常实用)
JavaScript中你不知道的数学方法 (非常实用)
|
存储 缓存 JavaScript
非常实用的JavaScript技巧
非常实用的JavaScript技巧
62 0
|
前端开发 JavaScript
JavaScript问题总结
JavaScript问题总结
76 0
|
JavaScript 前端开发
JavaScript 中的 mailto
JavaScript 中的 mailto
137 0
|
存储 JavaScript 前端开发
【初识JavaScript-03】
【初识JavaScript-03】
95 0
【初识JavaScript-03】

相关实验场景

更多