优秀的编程知识分享平台

网站首页 > 技术文章 正文

js数据类型判断 def undef object null date number function element url

nanyue 2024-07-30 03:28:07 技术文章 11 ℃
const toString = Object.prototype.toString;
// 各种类型
export function is(val: unknown, type: string) {
  return toString.call(val) === `[object ${type}]`;
}
// undefined
export function isDef<T = unknown>(val?: T): val is T {
  return typeof val !== 'undefined';
}
// !undefined
export function isUnDef<T = unknown>(val?: T): val is T {
  return !isDef(val);
}
//Object
export function isObject(val: any): val is Record<any, any> {
  return val !== null && is(val, 'Object');
}
// ''
export function isEmpty<T = unknown>(val: T): val is T {
  if (isArray(val) || isString(val)) {
    return val.length === 0;
  }

  if (val instanceof Map || val instanceof Set) {
    return val.size === 0;
  }

  if (isObject(val)) {
    return Object.keys(val).length === 0;
  }

  return false;
}
//Date
export function isDate(val: unknown): val is Date {
  return is(val, 'Date');
}
//null
export function isNull(val: unknown): val is null {
  return val === null;
}
// underfind && null
export function isNullAndUnDef(val: unknown): val is null | undefined {
  return isUnDef(val) && isNull(val);
}

export function isNullOrUnDef(val: unknown): val is null | undefined {
  return isUnDef(val) || isNull(val);
}
// Number
export function isNumber(val: unknown): val is number {
  return is(val, 'Number');
}
// promise
export function isPromise<T = any>(val: unknown): val is Promise<T> {
  return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch);
}
// string
export function isString(val: unknown): val is string {
  return is(val, 'String');
}
// function
export function isFunction(val: unknown): val is Function {
  return typeof val === 'function';
}
// Boolean
export function isBoolean(val: unknown): val is boolean {
  return is(val, 'Boolean');
}
// RegExp
export function isRegExp(val: unknown): val is RegExp {
  return is(val, 'RegExp');
}
// isArray
export function isArray(val: any): val is Array<any> {
  return val && Array.isArray(val);
}
// window
export function isWindow(val: any): val is Window {
  return typeof window !== 'undefined' && is(val, 'Window');
}
// element
export function isElement(val: unknown): val is Element {
  return isObject(val) && !!val.tagName;
}
// ismap
export function isMap(val: unknown): val is Map<any, any> {
  return is(val, 'Map');
}

export const isServer = typeof window === 'undefined';

export const isClient = !isServer;

export function isUrl(path: string): boolean {
  const reg =
    /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
  return reg.test(path);
}



js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)。

typeof 操作符

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,也就是typeof关键字.

typeof   123   //Number
typeof   'abc'  //String
typeof    true       //Boolean
typeof    undefined   //Undefined
typeof    null        //Object
typeof    { }           //Object
typeof    [ ]           //Object
typeof    console.log()       //Function

null类型进行typeof操作符后,结果是object,原因在于,null类型被当做一个空对象引用。

1.Number类型

Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。

NaN:非数字类型。特点:① 涉及到的 任何关于NaN的操作,都会返回NaN ② NaN不等于自身。

isNaN() 函数用于检查其参数是否是非数字值。

isNaN(123)  //false   isNaN("hello")  //true

2.String类型

字符串有length属性。

字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。

3.Boolean类型

该类型只有两个值,true和false

4.Undefined类型

只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。

5.Null类型

null类型被看做空对象指针,前文说到null类型也是空的对象引用。

6.Object类型

js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

三大引用类型

1.Object类型

我们看到的大多数类型值都是Object类型的实例,创建Object实例的方式有两种。

第一种是使用new操作符后跟Object构造函数,如下所示

var person = new Object();
person.name = "Micheal";
person.age = 24;

第二种方式是使用对象字面量表示法,如下所示

var person = {
  name : "Micheal",
  age : 24
};

2.Array类型

数组的每一项可以用来保存任何类型的数据,也就是说,可以用数组的第一个位置来保存字符串,第二个位置来保存数值,第三个位置保存对象....另外,数组的大小是可以动态调整的。

创建数组的基本方式有两种

第一种是使用Array构造函数,如下所示

var colors = new Array("red","blue","yellow");

第二种是使用数组字面量表示法,如下所示

var colors = ["red","blue","yellow"];

3 Function类型

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。函数通常是使用函数声明语法定义的,如下所示

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

这和使用函数表达式定义函数的方式相差无几。

var sun = function (){
  return sum1 + sum2;
};

也就是说,js按照存储方式分为值类型和引用类型。那么他们的计算有什么区别呢?

题目1: var a = 100;

    var b = a;

    a = 200;

    console.log (b);

题目2: var a = {age : 20};

    var b = a;

    b.age = 21;

    console.log (a.age);

题目1的答案是 100,题目2的答案是21,

最近发表
标签列表