js (一)数据类型与判断

news2024/11/26 9:52:38

数据类型

基本(值)类型:

String

字符串是不可变的

let lang=“java”;
lang = lang + “script”; //先销毁再创建

Number

在数值类型中,存在一个特殊数值NaN,意为“不是数值”,用于表示本来要返回数值的操作失败了(而不是抛出错误)

boolean

数据类型 转换为 true 的值 转换为 false 的值
String 非空字符串 “”
Number 非零数值(包括无穷值) 0 、 NaN
Object 任意对象 null
Undefined N/A (不存在) undefined

undifined

当使用 var或 let声明了变量但没有初始化时,就相当于给变量赋予了 undefined值

null

Null类型同样只有一个值,即特殊值 null

逻辑上讲, null 值表示一个空对象指针,这也是给typeof传一个 null 会返回 “object” 的原因

let car = null;
console.log(typeof car); // "object"
undefined 值是由 null值派生而来

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

只要变量要保存对象,而当时又没有那个对象可保存,就可用 null来填充该变量

symbol

Symbol (符号)是原始值,且符号实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险

let genericSymbol = Symbol();
let otherGenericSymbol = Symbol();
console.log(genericSymbol == otherGenericSymbol); // false

let fooSymbol = Symbol('foo');
let otherFooSymbol = Symbol('foo');
console.log(fooSymbol == otherFooSymbol); // false

对象(引用)类型:

Object

创建object常用方式为对象字面量表示法,属性名可以是字符串或数值

let person = {
    name: "Nicholas",
    "age": 29,
    5: true
};

Function

函数实际上是对象,每个函数都是 Function类型的实例,而 Function也有属性和方法,跟其他引用类型一样

函数存在三种常见的表达方式:

函数声明

// 函数声明
function sum (num1, num2) {
    return num1 + num2;
}

函数表达式

let sum = function(num1, num2) {
    return num1 + num2;
};

箭头函数
函数声明和函数表达式两种方式

let sum = (num1, num2) => {
    return num1 + num2;
};

Array

JavaScript数组是一组有序的数据,但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。并且,数组也是动态大小的,会随着数据添加而自动增长

let colors = ["red", 2, {age: 20 }]
colors.push(2)

面试系列

1、undefined和null的区别:

undefined:定义未赋值 var a;

null:定义且赋值为null a=null;

2、什么时候给变量赋值为null

初始赋值为null,表明将要赋值为null

最后赋值为null,让其指向的对象变为垃圾对象,被垃圾回收器回收,释放内存

3、严格区分变量类型于数据类型

数据类型:基本类型、对象类型

变量类型(变量内存值的类型):

​ 基本类型 保存的是基本类型的数据

​ 引用类型 保存的是地址值

判断数据类型

1、typeof

  • 返回的结果是字符串
  • 直接在计算机底层基于数据类型的值(二进制)进行检测
  • typeof null “object” 对象存储在计算机中,都是以000开始的二进制存储,null也是,所以检测出来的结果是对象 实际上不是对象,可以理解为浏览器的一个bug js会把null理解为一个空对象引用
  • typeof 普通对象/数组对象/正则对象/日期对象 “object”
  • 基本数据类型(除去null)是很准确的
    在这里插入图片描述

2、instanceof

  • 检测当前实例是否属于这个类的 返回结果为Boolean类型值
  • 底层机制:只要当前类出现在实例的原型链上,结果都是true
  • 由于我们可以肆意的修改原型的指向,所以检测出来的结果是不准的
  • 不能检测基本数据类型 1 instanceof number 为false
    在这里插入图片描述
    在这里插入图片描述
    实现一个instance
function instance_of(example, classFunc) {
    let classFuncPrototype = classFunc.prototype,
        proto = Object.getPrototypeOf(example); // example.__proto__ ie不兼容
    while (true) {
        if (proto === null) {
            // Object.prototype.__proto__ => null
            return false;
        }
        if (proto === classFuncPrototype) {
            // 查找过程中发现有,则证明实例是这个类的一个实例
            return true;
        }
        proto = Object.getPrototypeOf(proto);
    }
}

3、constructor

  • 用起来看似比instanceof还好用一些(基本类型支持的)
  • constructor可以随便改,所以也不准
let arr = [];
console.log(arr.constructor === Array); // true
console.log(arr.constructor === RegExp); // false
console.log(arr.constructor === Object); // false

Number.prototype.constructor = 'AA';
let n = 1;
console.log(n.constructor === Number); // false 

4、Object.prototype.toString.call([value])

  • 标准检测数据类型的办法:Object.prototype.toString不是转换为字符串,是返回当前实例所属类的信息
  • 标准检测的办法 "[object Number/String/Boolean/Null/Undefined/Symbol/Object/Array/RegExp/Date/Function]"
  • Object.prototype.toString.call(o).replace(/(\[object\s|\])/g, "")

jquery中实现数据类型

(function () {
    var class2type = {};
    var toString = class2type.toString; //=>Object.prototype.toString

    // 设定数据类型的映射表
    ["Boolean", "Number", "String", "Function", "Array", "Date", "RegExp", "Object", "Error", "Symbol"].forEach(name => {
        class2type[`[object ${name}]`] = name.toLowerCase();
    });

    function toType(obj) {
        if (obj == null) {
            // 传递的值是null或者undefined,就返回对应的字符串
            return obj + "";
        }
        // 基本数据类型都采用typeof检测
        return typeof obj === "object" || typeof obj === "function" ?
            class2type[toString.call(obj)] || "object" :
            typeof obj;
    }

    window.toType = toType;
})();

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

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

相关文章

计算机网络——计算机网络体系结构

文章目录 **1 计算机网络概述****1.1 概念****1.2 组成****1.3 功能****1.4 分类****1.5 性能指标** **2 计算机网络体系结构与参考模型****2.1 计算机网络分层结构****2.2 计算机网络协议,接口,服务的概念****2.3 ISO/OSI参考模型和TCP/IP模型** 1 计算…

操作系统Linux-day02

Linux学习 常见的cmd命令 winR 输入cmd打开窗口 ipconfig 查看ip地址信息ping查看网络连接情况或者网速情况 ping内网,外网,路由cd change directory 切换目录 cd 目录名称 切换到目录下 cd .. 切换到上一级 cd / 切换到根目录 dir 显示目录中的文…

Oracle初级

目录 概念 数据库分类 Oracle 存储结构 安装成功 ​编辑 创建用户和表空间 以超级管理员身份登录 创建表空间 创建用户 给用户授权 查询测试 概念 数据库(database): 物理操作系统文件或磁盘的集合。简单来说数据库的意思是数据的集合。 DBM…

基于51单片机的智能照明控制系统

**功能:**基于51单片机的智能照明控制系统,以51系列单片机为核心,使用光敏传感模块(采用ADC0832对光敏电路进行AD转换)、红外传感模块与声敏传感模块组成检测装置,并采用PWM对照明灯的光强度进行控制。 1.本设计分为手动模式和自动…

Python入门自学进阶-Web框架——37、异步IO与scrapy

异步IO: 一个请求多个网址并获取返回值的程序: import requestsurl_list [https://www.baidu.com,https://www.google.com,https://www.bing.com,https://www.sohu.com, ] for url in url_list:print(开始请求:,url)response requests.ge…

B068-项目实战-技术准备-Nosql-redis

目录 概述Redis简介:NoSql分类:Redis是什么特点(优势)Mysql、Memcached和Redis的比较使用场景 应用安装使用默认客户端redis-cli/命令行操作对value为string类型的常用操作对key的常用操作对list集合的常用操作其他命令行操作 jav…

JavaWeb(1)——HTML、CSS、JS 快速入门

JavaWeb 是使用 Java 技术来构建 Web 应用程序的一种方法。 HTML(超文本标记语言,负责网页的结构)是一种用于创建网页结构和内容的标记语言。它由一系列标签组成,每个标签都有特定的功能。开发人员可以使用 HTML 来定义页面的结构…

工作学习笔记

文章目录 一、java基础1、Hashcode的作用2、String、String StringBuffer 和 StringBuilder 的区别是什么?3、 Java的四种引用,强弱软虚4、3*0.1 0.3返回值是什么5、final修饰引用数据类型 二、jvm1、内存模型2、如何判断对象可以被回收3、Minor GC与Full GC分别在…

泊松比、泊松比范围、广义胡克定律、体积应变方程

泊松比(Poisson’s ratio)提供了有关不同材料在负载下如何变形的关键信息,将施加载荷的方向称为纵向(longitudinal direction),将垂直方向称为横向(lateral directions) 当在一个方…

RK3568平台开发系列讲解(编解码篇)编解码功能介绍及体验

🚀返回专栏总目录 文章目录 一、编解码功能简介二、音频和视频播放的操作2.1、使用 gplay 播放器播放视频和音频2.2、使用 gst-launch 播放视频2.3、使用 gst-launch 播放音频2.4、使用 gst-launch 播放视频和音频沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇…

优化SQL查询实现高效数据检索(二)

大家好,本文将接着上文,继续介绍SQL查询优化的重要性以及如何优化SQL查询以实现更快的数据检索。 适当使用通配符 适当使用通配符对于优化SQL查询尤为重要,特别是在匹配字符串和模式方面。通配符是用于SQL查询中查找特定模式的特殊字符&…

【学生系统】基于结构体的一个训练小项目

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

Go []uint8和string的爱恨情仇

先上代码: package mainimport "fmt"func main() {byteSlice : []uint8{52, 44, 51} // 示例字节切片str : string(byteSlice)fmt.Printf("byteSlice:%v\r\n", str) }// 执行-输出 byteSlice:4,3 干货: 在Go语言中,[]u…

TiDB-学习笔记02

编写这个笔记,希望能记录下学习TiDB时候的知识点。 参考文章 目的链接&详细TiDB中文手册 Overview 面板重要监控指标详解 | PingCAP 文档中心 第二章 章节Overview 面板重要监控指标详解 | PingCAP 文档中心 认识Grafana Grafana监控TiDB 对应中文手册的【14…

如何使用 Java 代理插件在不更改应用程序代码的情况下捕获自定义指标

作者:Jack Shirazi Elastic APM Java 代理会自动跟踪许多指标,包括通过 Micrometer 或 OpenTelemetry Metrics API 生成的指标。 因此,如果你的应用程序(或其包含的库)已公开来自这些 API 之一的指标,则安装…

3Ds max无需插件创建逼真的草地

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 最终图像: 步骤-1 创建一个宽度 x 高度为 100100(我使用厘米)和 100100 段的平面。 步骤-2 将平面转换为“编辑多边形”并选择所有顶点(Ctrl A&#xff09…

AI Chat 设计模式:6. 装饰模式

本文是该系列的第六篇,内容采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的旁白。 问题列表 Q.1 你知道装饰模式吗A.1Q.2 详细说说装饰模式的组成角色A.2Q.3 举一个装饰模式的例子吧&#xf…

Threejs加载倾斜摄影OSGB数据

个人主页: 左本Web3D,更多案例预览请点击》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。获取模型或源码请点赞收藏加留言,有问…

数据库锁的12连问,抗住!

前言 金三银四很快就要来啦,准备了数据库锁的12连问,相信大家看完肯定会有帮助的。 1. 为什么需要加锁 在日常生活中,如果你心情不好想静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁。这就是生…

git基础教程(linux)

1.git简介 git 分布式版本控制 git两大特点: 版本控制:支持多人同时开发 分布式: 2.安装与配置 安装 sudo apt-get install git安装成功,运行如下命令: git3.创建一个版本库 (1)新建一个目录git_test&#xff0c…