JS之数据类型

JavaScript中的内置类型:

null
undefined
布尔值(boolean)
数字(number)
字符串(string)
对象(Object)

数据类型分类

除了对象,其他几个都是基本类型,这是因为声明变量时不同的内存分配而决定的

基本类型

JavaScript 中共有 6 种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol。
基本类型存储在栈中,也就是说:
它们的值直接存储在变量访问的位置。
这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域 – 栈中。
这样存储便于迅速查寻变量的值。
基本类型的值是按值访问的,且基本类型的值是不可变的。

var str = "123hello321";
str.toUpperCase();
console.log(str);

基本类型的比较是它们的值的比较

var a = 1;
var b = true;
console.log(a == b);    // == 只进行值的比较
console.log(a === b);   // === 不仅进行值得比较,还要进行数据类型的比较

引用类型

引用类型存储在堆中的对象,也就是说:

存储在变量处的值是一个指针,指向存储对象的内存地址。
引用类型的值是按引用访问的,且引用类型的值是可变的。
变量存储的是可以打开保存数据的房间的钥匙
存储钥匙地址的大小是固定的,所以把它存储在栈中对变量性能无任何负面影响。
除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:

Object
Array
Date
RegExp
Function

引用类型的比较是引用的比较:

var obj1 = {};    // 新建一个空对象 obj1
var obj2 = {};    // 新建一个空对象 obj2
console.log(obj1 == obj2);    // false
console.log(obj1 === obj2);   // false

小结

基本类型

栈内存中包括了变量的标识符和变量的值
引用类型

栈内存中保存了变量标识符和指向堆内存中该对象的指针
堆内存中保存了对象的内容

常见问题

JavaScript中的变量是没有类型的

来看下面的例子:

var a = 100; // 严格地说 变量a没有类型,它所保存的 100是数字类型的
typeof a === 'number'; // 其实检测是=>typeof 100

a = 'string'
typeof a === 'string'; // true

变量a可以随时持有任何类型的值。换个角度来理解就是,JavaScript不做“类型强制”;也就是说,语言引擎不要求变量总是持有与其初始值同类型的值。

typeof检测不总是对的

number

typeof Math.LN2 === 'number'; // true  Math的属性
typeof Infinity === 'number'; // true 无穷
typeof NaN === 'number'; // true 特殊的数字类型,not a number
// 被强转称数字的其他数据类型
typeof Number('str') === 'number'; // Number('str') => NaN => number

string

typeof (typeof 1) === 'string'; // typeof always returns a string
typeof String(1) === 'string'; // 强转成字符串

布尔值

typeof Boolean(1) === 'boolean'; // 强制类型转换
typeof !!(1) === 'boolean'; 

undefined

一个没有被赋值的变量的数据类型是undefined

typeof undefined === 'undefined';

object

typeof { name: '小明' } === 'object';

null

值得我们注意恰恰是这个null,typeof 对它的处理返回的是object

typeof null === 'object'; // true

function

typeof检测函数返回的也是object,这是因为从规范上看function实际上是object的一个子类型。

// Functions
typeof function() {} === 'function';
typeof class C {} === 'function';

null和undefined

null:特指对象的值未设置。它是 JavaScript 基本类型 之一。
它不是全局对象的一个属性;
在 API 中,null 常在返回类型应是一个对象,但没有关联的值的地方使用。
undefined:表示声明但未被赋值的变量类型
你可以使用undefined和严格相等或不相等操作符来决定一个变量是否拥有值。
他们的区别:

当检测 null 或 undefined 时,注意相等 == ,===两个操作符的区别 ,前者会执行类型转换:

typeof检测时两者的返回值不同
代表的含义不同

typeof null        // "object" (因为一些以前的原因而不是'null')
typeof undefined   // "undefined"
null === undefined // false
null  == undefined // true
null === null // true
null == null // true
!null //true
isNaN(1 + null) // false
isNaN(1 + undefined) // true

智慧工地解决方案旨在通过信息化手段提高建筑行业的监管水平和施工企业的管理效率。该方案响应了国家“十二五”规划中提出的全面提高行业信息化水平的要求,通过建立统一的建筑施工安全生产监管信息平台,解决政府监管部门面临的监管难题,如环境复杂、人员复杂、施工地点分散等。同时,它也帮助建筑企业应对劳动力流动大、成本上升、劳务纠纷等问题,通过信息化手段提升施工质量和安全管理。 智慧工地的整体思路是通过信息化建设,为政府职能部门提供监管手段,为施工企业提供管理支撑。这包括视频监控、实名制考勤、人员定位和免费WIFI上网等模块。视频监控系统能够实时监控工地现场,确保施工进度和安全;实名制考勤系统则确保合法用工,提高劳务管理的效率;人员定位系统有助于追踪工地人员,增强安全管理;免费WIFI上网则为工人提供娱乐和信息获取的途径,提高生活质量。 该方案的实施,不仅降低了政府的监管成本,提高了监管效率,还帮助建筑企业实时了解施工现场的安全和污染情况,掌握施工进度,降低管理成本,提升施工质量。此外,外来务工人员也能享受到信息化带来的便利,如通过智能终端免费上网,享受健康娱乐方式。 智慧工地项目的优势在于其专业的团队和丰富的实施经验。项目团队整合了全方位的资源,打造了行业信息化解决方案,并提供了个性化的行业信息化应用定制。此外,项目还依托于专业的运营团队和丰富的运营经验,提供了通信类系统和IT系统维护等服务外包。 最后,智慧工地项目通过政府牵头、企业投资、资源共享的合作模式,实现了普惠于民的目标。例如,武清区建委智慧工地项目通过视频监控和手机考勤系统,规范了建筑市场秩序,为保证工程质量奠定了基础,同时有效降低了监管成本,提高了建筑工地突发事件的应急处置能力。这种合作模式不仅提升了建筑行业的整体效率,也为构建美丽城市和实现中国梦做出了贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值