js 数据类型

js的八种数据类型:

基本类型(基本类型):Number,String,Boolean,Undefined,Null,Symbol

引用数据类型(对象类型):Object,Array,Function

Undefined

Undefined只有一个唯一的值:undefined。

undefined出现的常见两种情况:

  1. 未定义的变量,使用typeof对这个变量进行操作会返回undefined。如果使用其他的操作符来检测该变量的数据类型,会报错。
    console.log(typeof data)
  2. 定义了的变量,但是还未初始化或者是这个变量初始化为undefined,这个变量的值就是undefined。一般来说,我们没有必要把一个变量显示初始化为undefined,因为会默认为undefined。
    let data;
    console.log(data)

undefined判断:

  1. 使用严格相等符===或者不相等操作符!==来进行判断,不能使用==,因为==会检查变量是否为null,但是===就不检查。注意null 不等同于 undefined。
  2. 使用typeof操作符。

Null

Null只有一个唯一的值:null。它是一个字面量,空值,null表示一个空指针,表示对象没有指向任何对象。

null判断:

使用严格相等符===或者不相等操作符!==来进行判断,不能使用==。,因为==会检查变量是否为undefined。

不能使用typeof判断,因为typeof会判断null为一个对象。

if(data === null){console.log("yes");}

在什么时候使用null?

  1. 定义的变量在后续中会用来保存数据,但是现在还没有保存,就要把这变量的值初始化为null。
  2. 当这个数据不要需要时,把这个数据设置为null,解除引用。

undefined和null判断

console.log(null == undefined); //true
console.log(null === undefined); //false

Symbol

Symbol是ES6引入的一种数据类型,表示独一无二的值,Symbol是一个类似于字符串的数据类型。

symbol的注意事项:

  1. Symbol函数前不能使用new命令,会报错。
  2. Symbol使用typeof判断变量类型会显示为Symbol类型。
  3. Symbol创建时的参数:
    1. 字符串
    2. 对象,调用对象的toString方法,将其转换为字符串,生成一个Symbol值
      const obj = {toString(){return 'abc';}
      };
      const sym = Symbol(obj);
      sym // Symbol('abc');
  4. 相同参数的Symbol函数的返回值是不相等的,Symbol函数的参数只表示当前symbol值的描述。 
    var s1 = Symbol('foo');
    var s2 = Symbol('foo');
    s1 === s2//false
  5. Symbol值不能与其他类型的值进行运算,会报错,但是Symbol可以转换成其他类型的值。
    1. 显式转为字符串
      var sym = Symbol('symbol');
      sym.toString();
      String(sym);
    2. 显式转为布尔值
      Boolean(sym);

Symbol作为属性名:

每个Symbol值都是不相等的,Symbol作为标识符用于对象的属性名,不会出现同名的属性。

Symbol值作为属性名时,该属性是公开属性,不是私有属性。

Symbol作为属性名写法:
var mySymbol = Symbol();// 第一种
var a = {};
a[mySymbol] = "hello!";// 第二种
var a = {[mySymbol]: "hello!"
}// 第三种
var a = {};
Object.defineProperty(a, mySymbol, { value: 'hello!' });//结果
a[mySymbol] // "hello!"

 Symbol值作为对象属性名时,不能使用点运算符。

解释:点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的值,导致a的属性名实际上是一个字符串。不是一个Symbol值。

简化obj对象的写法:

// 增强的对象写法
let s = Symbol();
let obj = {[s] (arg) {}
}

Symbol定义常量,保证这组常量的值是不相等的。

常量值命名要大写字母+下划线。

log.levels = {DEBUG: Symbol('debug'),
}
log(log.levels.DEBUG)

instanceof 和 typeof 

instanceof

instanceof用来检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。即检查对象是否是特定类(或构造函数)的实例。可以用来确定对象的继承关系、

object instanceof constructorlet Car = function() {}
let benz = new Car()
benz instanceof Car // true

instanceof的实现原理:

function instanceof(obj, constructor) {// obj的隐式原型let implicitPrototype = obj?.__proto__;// 构造函数的原型const displayPrototype = constructor.prototype;// 遍历原型链while (implicitPrototype) {// 找到,返回trueif (implicitPrototype === displayPrototype) return true;implicitPrototype = implicitPrototype.__proto__;}return false;
}

typeof

typeof返回一个字符串,表示传入参数的类型。

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'// 无法准确检测 null 和 数组
typeof null // 'object'
typeof [] // 'object'typeof {} // 'object'
typeof console.log // 'function'

判断一个变量是否存在:

if(typeof a != 'undefined'){//变量存在
}

instanceof和typeof的区别:

  1. 返回值不同:typeof返回的是一个字符串,instanceof返回的是一个布尔值。
  2. typeof可以用来检查基本数据类型和函数,但是对数组和null处理不够准确
  3. instanceof用于检查对象是否是特定类的实例,可以很好的处理继承关系,具有灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis中xml文件容易搞混的属性

目录 第一章、1.1)MyBatis中resultMap标签1.2)MyBatis的resultType1.3)MyBatis的parameterType1.4)type属性1.5)jdbcType属性1.6)javaType属性1.7)ofType属性 友情提醒: 先看文章目录&#xff…

【k8s】--insecure-registry详解 ( 访问仓库、https、http)

文章目录 一、--insecure-registry是什么二、如何使用--insecure-registry三、--insecure-registry的安全风险四、--insecure-registry的替代方案五、总结参考 一、–insecure-registry是什么 --insecure-registry是docker中用来设置与docker registry通信的安全限制的一个参数…

猫粮哪个牌子好又安全?好又安全的主食冻干猫粮牌子推荐

现在越来越多的铲屎官关注猫咪的食品选择,而冻干猫粮一直是热门话题。其中主食冻干的肉含量很高,富含猫咪成长所需的蛋白质、维生素等营养物质。而且冻干工艺还保留了食材的原始风味,复水后可以恢复鲜肉的口感,猫咪很喜欢吃&#…

人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)

上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import load_model impor…

.net web API的文件传输(上传和下载)客户端winform

防止反复造轮子,直接上代码。 客户端代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.IO.Compression; using System.Linq; using …

conda channel的镜像设置

目录 前言1 显示所有channel2 移除清华镜像3 添加可用的清华源4 下载opencv5 一些其他的conda指令参考文献 ———————————————— 版权声明:本文为CSDN博主「宇内虹游」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链…

关于“Python”的核心知识点整理大全27

目录 10.5 小结 第11 章 测试代码 11.1 测试函数 name_function.py 函数get_formatted_name()将名和姓合并成姓名,在名和姓之间加上一个空格,并将它们的 首字母都大写,再返回结果。为核实get_formatted_name()像期望的那样工…

arcgis javascript api4.x加载天地图cgs2000坐标系

需求&#xff1a;arcgis javascript api4.x加载天地图cgs2000坐标系 效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

《LeetCode力扣练习》代码随想录——双指针法(反转字符串---Java)

《LeetCode力扣练习》代码随想录——双指针法&#xff08;反转字符串—Java&#xff09; 刷题思路来源于 代码随想录 344. 反转字符串 相向双指针 class Solution {public void reverseString(char[] s) {if(s.length1){return;}int left0;int rights.length-1;while(left<r…

Python爬虫-解决使用requests,Pyppeteer,Selenium遇到网站显示“您的连接不是私密连接”的问题|疑难杂症解决(2)

前言 本文是该专栏的第13篇,后面会持续分享python爬虫案例干货,记得关注。 相信很多同学在处理爬虫项目的时候,会遇到一些网站出现如下图所示的情况: 就是当你不论是使用requests进行协议请求,还是使用自动化框架pyppeteer或者selenium都会出现上图中的情况。这相信会或多…

查找书籍(缓冲区)

给定n本书的名称和定价&#xff0c;本题要求编写程序&#xff0c;查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行给出正整数n&#xff08;<10&#xff09;&#xff0c;随后给出n本书的信息。每本书在一行中给出书名&#xff0c;即长度不超过30的字…

年度大盘点:AIGC、AGI、GhatGPT震撼登场!揭秘人工智能大模型的奥秘与必读书单

这里写目录标题 前言01 《ChatGPT 驱动软件开发》02 《ChatGPT原理与实战》03 《神经网络与深度学习》04 《AIGC重塑教育》05 《通用人工智能》 前言 在2023年&#xff0c;人工智能领域经历了一场前所未有的大爆发&#xff0c;特别是在语言模型领域。新的概念和英文缩写如AIGC、…

Ngnix之反向代理、负载均衡、动静分离

目录 1. Ngnix 1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 1.3 负载均衡 1.4 动静分离 1. Ngnix Nginx是一个高性能的开源Web服务器&#xff0…

设备运维管理系统,设备列表管理,设备拓扑图关系图,告警日志运维

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

C# 图解教程 第5版 —— 第19章 枚举器和迭代器

文章目录 19.1 枚举器和可枚举类型19.2 IEnumerator 接口19.3 IEnumerable 接口19.4 泛型枚举接口19.5 迭代器19.5.1 迭代器块19.5.2 使用迭代器来创建枚举器19.5.3 使用迭代器来创建可枚举类型 19.6 常见迭代器模式19.7 产生多个可枚举类型19.8 将迭代器作为属性19.9 迭代器的…

【vSphere | VM】虚拟机自定义规范Ⅳ —— 使用虚拟机自定义规范创建 Linux 和 Windows VM

目录 5. 使用虚拟机自定义规范创建VM5.1 Linux 虚拟机示例Rocky Linux 9.2&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署虚拟机 5.2 Windows 虚拟机示例Windows 10&#xff08;1&#xff09;克隆虚拟机&#xff08;2&#xff09;模板部署 Windows 10 …

恒创科技:云服务器怎么买才便宜有优惠

随着云计算技术的不断发展&#xff0c;云服务器已经成为企业和个人用户的重要选择。然而&#xff0c;在购买云服务器时&#xff0c;价格和优惠成为了很多用户关注的焦点。那么&#xff0c;如何购买云服务器才能获得更优惠的价格呢&#xff1f;下面就为大家介绍一些购买云服务器…

windows10-EMQX与MQTTX的安装及配置使用教程

windows10-EMQX安装及配置使用教程 一、下载安装1.1 下载1.2 安装1.3 设置开机自启动 二、连接MQTT2.1 MQTT下载安装2.1.1 下载2.1.2 安装及配置 三、EMQX常用命令 本文介绍的是在windows10系统下的emqx的安装、配置及使用教程。 一、下载安装 1.1 下载 下载链接&#xff1a…

【漏洞复现】金和OA任意文件读取漏洞

Nx01 产品简介 金和数字化智能办公平台&#xff08;简称JC6&#xff09;是一款结合了人工智能技术的数字化办公平台&#xff0c;为企业带来了智能化的办公体验和全面的数字化转型支持。同时符合国家信创认证标准&#xff0c;支持组织数字化转型&#xff0c;实现业务流程的数字化…

订单未支付30分钟自动取消是如何实现的?

1.借助redis的过期特性 下单时&#xff0c;订单状态是待支付。将订单编号作为key&#xff0c;下单的时间戳作为value&#xff0c;设置过期时间是30分钟。服务器监听redis的key过期事件&#xff0c;如果是订单过期&#xff08;还会有其他key过期&#xff09;&#xff0c;则修改…