[improvement] optimize isNaN (#3988)

This commit is contained in:
neverland 2019-07-29 11:32:55 +08:00 committed by GitHub
parent 3299fb6d39
commit 7bcd7e1adc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 30 deletions

View File

@ -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;
}

View File

@ -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();
}

View 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();
}

View 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())
);
}

View File

@ -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;
}