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
目录
相关文章
|
移动开发 监控 开发工具
mPaaS常见问题之pod里使用abstract_target后会报错如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
241 0
|
前端开发 JavaScript
【JavaScript原型链prototype详解】
在JavaScript中,每个对象都有一个原型(prototype)属性,它指向另一个对象。这个被指向的对象也有自己的原型,以此类推,最终形成了一个原型链。原型链的顶端是Object.prototype,它是所有对象的根原型。 当我们访问一个对象的属性时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到匹配的属性或者到达原型链的末端。
363 0
【JavaScript原型链prototype详解】
|
8月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
监控 前端开发 安全
SpringCloud Gateway鉴权和跨域解决方案
SpringCloud Gateway鉴权和跨域解决方案
1658 0
|
7月前
|
人工智能 云计算
云工开物合作动态丨湖南大学与阿里云签署云工开物校企合作协议
2024年7月5日,湖南大学与阿里云签署合作协议,副校长李肯立与阿里云副总裁刘湘雯出席。双方将在课程共建、科研攻关、学生实践等方面展开合作。阿里云将为每位学生提供算力资源,并为教师每年提供40万元优惠权益。当天下午,阿里云-湖南大学人工智能学生实训营开营,200余名学生参与实操课程。此次合作旨在培养云计算与人工智能领域的高素质创新人才。
|
云安全 安全 API
2024 年 CSPM 产品该具备哪些能力?
云安全态势管理(CSPM)是一种持续管理IaaS和PaaS安全态势的解决方案,通过预防、检测和响应云基础设施风险来保障安全。CSPM应用通用框架、监管要求和企业政策,主动或被动地发现和评估云服务配置风险,并提供修复选项。例如,若阿里云OSS服务被错误地设置为公共读写权限,CSPM会检测出这种不当配置并提供修复建议。CSPM的核心功能包括实时配置检测、基于上下文的优先级排序、多云支持及自动修复选项,帮助企业及时发现并解决配置不当问题。
510 1
2024 年 CSPM 产品该具备哪些能力?
|
SQL 存储 安全
代码规范(如何提高代码规范)
在软件开发中,优雅的代码规范对于编写美观且实用的代码至关重要。以下是一些提升代码质量的建议: 1. **命名清晰**:使用描述性强的命名,使代码自解释,减少误解,提高可读性。 2. **简洁性**:用最少的代码实现功能,避免冗余,简洁的代码更易维护。 3. **一致性**:保持命名和编码风格的一致性,降低团队协作成本。 4. **注释**:合理注释解释代码意图,但避免过度注释。 5. **避免复杂性**:将复杂逻辑分解为简单部分,用函数或模块封装。 6. **重构**:定期重构代码以提高可读性和性能。 7. **测试**:编写单元测试确保代码的稳定性和可靠性。
253 1
|
负载均衡 Java 网络架构
Spring Boot与Netflix Eureka的集成
Spring Boot与Netflix Eureka的集成
|
前端开发 数据安全/隐私保护