mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[improvement] optimize isNaN (#3988)
This commit is contained in:
parent
3299fb6d39
commit
7bcd7e1adc
@ -1,9 +1,10 @@
|
||||
import { createNamespace } from '../utils';
|
||||
import { range } from '../utils/format/number';
|
||||
import { isDate } from '../utils/validate/date';
|
||||
import { padZero } from '../utils/format/string';
|
||||
import Picker from '../picker';
|
||||
import { pickerProps } from '../picker/shared';
|
||||
import { times, isValidDate, getTrueValue, getMonthEndDay } from './utils';
|
||||
import { times, getTrueValue, getMonthEndDay } from './utils';
|
||||
|
||||
const [createComponent, bem] = createNamespace('datetime-picker');
|
||||
const currentYear = new Date().getFullYear();
|
||||
@ -40,12 +41,12 @@ export default createComponent({
|
||||
minDate: {
|
||||
type: Date,
|
||||
default: () => new Date(currentYear - 10, 0, 1),
|
||||
validator: isValidDate
|
||||
validator: isDate
|
||||
},
|
||||
maxDate: {
|
||||
type: Date,
|
||||
default: () => new Date(currentYear + 10, 11, 31),
|
||||
validator: isValidDate
|
||||
validator: isDate
|
||||
},
|
||||
maxHour: {
|
||||
type: Number,
|
||||
@ -66,6 +67,7 @@ export default createComponent({
|
||||
watch: {
|
||||
value(val) {
|
||||
val = this.correctValue(val);
|
||||
|
||||
const isEqual =
|
||||
this.type === 'time'
|
||||
? val === this.innerValue
|
||||
@ -176,7 +178,7 @@ export default createComponent({
|
||||
// validate value
|
||||
const isDateType = this.type !== 'time';
|
||||
|
||||
if (isDateType && !isValidDate(value)) {
|
||||
if (isDateType && !isDate(value)) {
|
||||
value = this.minDate;
|
||||
} else if (!value) {
|
||||
value = `${padZero(this.minHour)}:00`;
|
||||
@ -253,8 +255,8 @@ export default createComponent({
|
||||
const year = getTrueValue(values[0]);
|
||||
const month = getTrueValue(values[1]);
|
||||
const maxDate = getMonthEndDay(year, month);
|
||||
let date = getTrueValue(values[2]);
|
||||
|
||||
let date = getTrueValue(values[2]);
|
||||
if (this.type === 'year-month') {
|
||||
date = 1;
|
||||
}
|
||||
|
@ -1,25 +0,0 @@
|
||||
export function isValidDate(date) {
|
||||
return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());
|
||||
}
|
||||
|
||||
export function times(n, iteratee) {
|
||||
let index = -1;
|
||||
const result = Array(n);
|
||||
|
||||
while (++index < n) {
|
||||
result[index] = iteratee(index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function getTrueValue(formattedValue) {
|
||||
if (!formattedValue) return;
|
||||
while (isNaN(parseInt(formattedValue, 10))) {
|
||||
formattedValue = formattedValue.slice(1);
|
||||
}
|
||||
return parseInt(formattedValue, 10);
|
||||
}
|
||||
|
||||
export function getMonthEndDay(year, month) {
|
||||
return 32 - new Date(year, month - 1, 32).getDate();
|
||||
}
|
28
src/datetime-picker/utils.ts
Normal file
28
src/datetime-picker/utils.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { isNaN } from '../utils/validate/number';
|
||||
|
||||
export function times(n: number, iteratee: (index: number) => any[]) {
|
||||
let index = -1;
|
||||
const result = Array(n);
|
||||
|
||||
while (++index < n) {
|
||||
result[index] = iteratee(index);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function getTrueValue(value: string | undefined): number | undefined {
|
||||
if (!value) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (isNaN(parseInt(value, 10))) {
|
||||
value = value.slice(1);
|
||||
}
|
||||
|
||||
return parseInt(value, 10);
|
||||
}
|
||||
|
||||
export function getMonthEndDay(year: number, month: number): number {
|
||||
return 32 - new Date(year, month - 1, 32).getDate();
|
||||
}
|
7
src/utils/validate/date.ts
Normal file
7
src/utils/validate/date.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { isNaN } from './number';
|
||||
|
||||
export function isDate(date: Date): boolean {
|
||||
return (
|
||||
Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime())
|
||||
);
|
||||
}
|
@ -1,3 +1,13 @@
|
||||
/* eslint-disable no-self-compare */
|
||||
|
||||
export function isNumber(value: string): boolean {
|
||||
return /^\d+(\.\d+)?$/.test(value);
|
||||
}
|
||||
|
||||
export function isNaN(value: any): boolean {
|
||||
if (Number.isNaN) {
|
||||
return Number.isNaN(value);
|
||||
}
|
||||
|
||||
return value !== value;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user