你不知道的javascript--数据类型(代码片段)

白与小寒 白与小寒     2022-11-05     387

关键词:

1. 数据类型

在js中有7中数据类型

其中6种是基本类型 包括 null, undefined, boolean, number, string和symbol,还有一种是引用类型object

但是判断数据类型的时候除了null以外都可以用typeof

1. null

null应该如何判断呢,应该是这样的

typeof a === object && !a

2) undefined

undefined判断可以用typeof,

有一个有趣的现象,很少有人关注未声明吧,事实上未声明 (undeclared) 和声明但未定义 (undefined) 是两种不同的现象,

但是在js中比较坑的是undeclared和undefined的是一样的,所以并不能知道变量的声明与否

比较幸运的一点是如果一个变量未声明就拿来用会导致严格模式下的报错而判断一个undeclared的变量却可以防止报错

比如要表示加入a未声明就声明一个a可以写作

 

2. 数组和类数组

1. 类数组指的是一类对象,他们可迭代,拥有数值作为属性,最重要的一点是他们拥有length属性,所以字符串也是一个类数组。

2. js数组的判断也不能用typeof但是对于对象有一个新的判别方法 instanceof 

3. 数组是一种对象所以可以写作 a[‘foo‘] = ‘bar‘也可以,但是却不能增加他的length, 但是比较有趣的一点是 a["13"] = "for", 却会导致length变成14,虽然传入的13是一个数值

4. 类数组转化数组可以用

 Array.from( fakeArr ) 

也可以

Array.prototype.slice.call( fakeArr )

Array.from是一个相当强大的东西,而slice是一个比较有趣的实现。

5. 借用数组的方法是一件很好玩的事情,在js里边数组拥有超级有钱的主,有很多实用的工具,字符串就很穷了,所以字符串可以和数组借用噢,怎么借用呢,就像上边的call那个样子咯。

 

3. 数值

数值的相关知识比较冷门,但也蛮有意思的 

1. 一直被人诟病的一定是js中没有真正的整数,很经典的一个是

 0.2 + 0.1 = 0.30000000000000004

 就是因为js内部存储并不是整型,浮点数这样区分的,

 2. 用e来表示数值是一个很不常见的做法,估计也只是因为计算器显示不够才会那么表示,js中也是可以的噢,比如3.04e3就等于3040

 3. 数值比较有趣的一点是42.toFixed(3)是一种错误的语法,居然是因为42后边的点被当成小数点解析了因为42.也是一个正确的表达方式,所以42..toFixed(3)是没毛病的

 4. 16进制的数值是在前边加 0x 而8进制的数值是在前边加上0

 5. NaN并不是说数据不是一个数值,更贴切的说是一个坏死的数值,比如 2/ ‘a‘ 就是一个坏死的数值。但是

typeof 2/a === ‘number // true

 同时js中有一个全局的函数 isNaN,  

‘a‘ === NaN // false
isNaN(a) // true

  6. +0 和 -0 在js中从数值上说一样,但是从向量的角度是不一样的。

 7. ES6的新方法Object.is

Object.is(2/ a,  NaN) // true

 

4. 值和引用

在老生常谈的引用类型和基本类型中也有一些很多人并不清晰的地方

1. 在js中是没有指针这个概念的,而且js中并没有变量之间互相引用,只有可能是一个值被10个变量引用,但是他们互相是没有关系的

2. 基本类型的复制是通过所引用的值的赋值,而引用类型是通过复制引用本身,而不是相互引用。所以会又下边这种现象。

var a = [1, 2, 3];
var b = a;
b.push(4) // 1, 2, 3, 4
b // [1, 2, 3, 4];
a // [1, 2, 3, 4];

b = [1, 2, 3, 4]; b.push(5) b // [1, 2, 3, 4, 5]; a // [1, 2, 3, 4];

 

上边的代码表示当 b 换了一个引用的值之后和 a 就没什么关系了,所以在变动之后 a 并不会发生变化

 

你不知道的javascript

一、对象JavaScript简单类型有数字、字符串、布尔值、null、undefined,其他所有的值都是对象(数组、函数、正则表达式都是对象)。数字、字符串、布尔值虽然拥有方法(包装对象),但并不是对象。包装对象:每当读取一个基... 查看详情

你不知道的javascript基础细节

语法部分type属性:默认的type就是javascript,所以不必显式指定type为javascriptjavascript不强制在每个语句结尾加“;”,javascript会自动加分号,但是在某些情况下会改变程序的语义,所以最好主动加“;”两个相等运算符比较‘==’... 查看详情

你不知道的javascript之类型

JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握。《你不知道的JavaScript》中是这样定义类型的:类型是值的内部特征,它定义了值的行为... 查看详情

你不知道的javascript——类型

一、ECMAScript语言中所有的值均有一个对应的语言类型。ECMAScript语言类型包括Undefined、Null、Boolean、String、Number和Object。  我们这样来定义类型:对于语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使... 查看详情

你不知道的javascript笔记

类型:JavaScript有7种内置类型空值(null)未定义(undefined)布尔值(boolean)数字(number)字符串(string)对象(object)符号(symbol)   除对象以外,其他统称为“基本类型” 用typeof运算符来查看值的类型typeofundefined ==="undefi... 查看详情

《你不知道的javascript》整理——对象

...造形式varmyObj=newObject();myObj.key=value; 二、类型对象是JavaScript的基础。1)基本类型在JavaScript中一共有六种主要类型(术语是“语言类型”):string、number、boolean、null、unde 查看详情

《你不知道的javascript[中卷]》——类型&值

                  类型定义了值的行为特征             &nb 查看详情

你不知道的高性能javascript

...,服务器端都可以看到JS的身影。本文会分享一些高效的JavaScript的最佳实践,提高大家对JS的底层和实现原理的理解。数据存储计算机学科中有一个经典问题是通过改变数据存储的位置来获得最佳的读写性能,在JavaScript中,数据... 查看详情

你不知道的基本数据类型和包装类+面试题(代码片段)

你不知道的基本数据类型和包装类+面试题基本数据类型Java基本数据按类型可以分为四大类:布尔型、整数型、浮点型、字符型,这四大类包含8种基本数据类型。布尔型:boolean整数型:byte、short、int、long浮点型:float、double字... 查看详情

可能你不知道的,关于自动装箱和自动拆箱(代码片段)

包装类我们知道,Java中包含了8种基本数据类型:整数类型:byte、short、int、long字符类型:char浮点类型:float、double布尔类型:boolean这8种基本数据类型的变量不需要使用new来创建,它们不会在堆上创建,而是直接在栈内存中存... 查看详情

《你不知道的javascript》——闭包(代码片段)

第一部分还有最后的闭包没有讲...:1.非常浅显的阅读《你不知道的JavaScript》第一部分作用域与闭包https://www.bilibili.com/video/BV1jE411j7PU 从22分钟开始讲闭包              &nb 查看详情

你不知道的javascript(代码片段)

简介众所周知,JavaScript既是一门充满吸引力、简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的JavaScript开发者,如果没有认真学习的话也无法真正理解它们。如果每次遇到JavaScript中出乎意料的行为时... 查看详情

你不知道的javascript中,读书笔记

七种内置类型null,undefined,boolean,number,string,object,symboltypeofnull===‘object‘//truenull是typeof是object的唯一的假值typeoffunction会返回‘function‘使用typeofx!==‘undefined‘比直接判断x更加安全,因为不会引发referenceerror 查看详情

作用域闭包《你不知道的javascript(上)》(代码片段)

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是当前词法作用域之外执行。 functionfoo()vara=2;functionbar()console.log(a);//2bar();foo();functionfoo()vara=2;functionbar()console.log(a);returnbar;varbaz=foo();baz();// 查看详情

作用域闭包《你不知道的javascript(上)》(代码片段)

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是当前词法作用域之外执行。 functionfoo()vara=2;functionbar()console.log(a);//2bar();foo();functionfoo()vara=2;functionbar()console.log(a);returnbar;varbaz=foo();baz();// 查看详情

你不知道的foreach(javascript)(代码片段)

Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想或解决方案。Array.prototype.forEach(callbackfn[,thisArg])规范地址(下述引用文,均源自该规范):https://tc39.es/ecma262/#sec-array.prototype.foreach跳过不存在的元... 查看详情

你不知道的javascript系列中(12)-特殊数值无穷数(代码片段)

...时错误(runtimeexception),例如“除以0”。然后在JavaScript中上例的结果为Infinity vara=1/0;//Infinityvara=-1/0;//-Infinity如果除法运算中的一个操作数为负数,则结果为-Infinity。JavaScript 查看详情

你不知道的javascript系列中(12)-特殊数值无穷数(代码片段)

...时错误(runtimeexception),例如“除以0”。然后在JavaScript中上例的结果为Infinity vara=1/0;//Infinityvara=-1/0;//-Infinity如果除法运算中的一个操作数为负数,则结果为-Infinity。JavaScript 查看详情