当前位置:首页 > JavaScript

js实现类型

2026-03-02 07:55:30JavaScript

JavaScript 实现类型检查的方法

JavaScript 提供了多种方式来实现类型检查,以下是一些常见的方法:

typeof 操作符 使用 typeof 操作符可以检查变量的基本类型,返回一个表示类型的字符串。例如:

typeof "hello" // "string"
typeof 42 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof null // "object" (历史遗留问题)
typeof {} // "object"
typeof [] // "object"
typeof function(){} // "function"

instanceof 操作符 instanceof 用于检查对象是否为某个构造函数的实例,适用于自定义对象和内置对象:

[] instanceof Array // true
new Date() instanceof Date // true
"hello" instanceof String // false (原始类型不是对象)
new String("hello") instanceof String // true

Object.prototype.toString.call() 该方法可以更精确地识别对象的具体类型,适用于内置对象和原始类型:

Object.prototype.toString.call([]) // "[object Array]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call(42) // "[object Number]"
Object.prototype.toString.call(null) // "[object Null]"

Array.isArray() 专门用于检查一个值是否为数组:

Array.isArray([]) // true
Array.isArray({}) // false

自定义类型检查函数 可以编写自定义函数实现更复杂的类型检查逻辑:

function isFunction(value) {
  return typeof value === "function"
}

function isPlainObject(value) {
  return value !== null && typeof value === "object" && 
    Object.prototype.toString.call(value) === "[object Object]"
}

TypeScript 的类型系统

对于更严格的类型检查,可以使用 TypeScript 的静态类型系统:

js实现类型

接口和类型别名

interface Person {
  name: string
  age: number
}

type Point = {
  x: number
  y: number
}

类型守卫

function isString(value: any): value is string {
  return typeof value === "string"
}

if (isString(input)) {
  // 在此块中,input 被推断为 string 类型
}

泛型

function identity<T>(arg: T): T {
  return arg
}

运行时类型验证库

对于更复杂的运行时类型检查,可以使用专门的库:

js实现类型

zod

import { z } from "zod"

const schema = z.object({
  username: z.string(),
  age: z.number().positive(),
})

schema.parse({ username: "john", age: 42 })

joi

const Joi = require("joi")

const schema = Joi.object({
  username: Joi.string().alphanum().min(3).max(30).required(),
  age: Joi.number().integer().min(0).max(150)
})

类型转换方法

JavaScript 也提供了一些类型转换的方法:

显式类型转换

Number("42") // 42
String(42) // "42"
Boolean(1) // true

隐式类型转换

"42" + 0 // "420" (字符串拼接)
"42" - 0 // 42 (数字减法)
!!"hello" // true (双重否定转为布尔值)

这些方法可以根据不同场景选择使用,从简单的类型检查到复杂的运行时验证都能覆盖。

标签: 类型js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…