In Ruby on Rails, all objects have a useful
blank?
method
Show archive.org snapshot
. It returns true for nil
but also for empty strings or empty arrays. There is also a universal method present?
which returns true
for all values that are not blank?
.
In JavaScript you need to roll your own implementation of blank?
and present?
.
If your application uses
Unpoly
Show archive.org snapshot
you may also use
up.util.isBlank()
Show archive.org snapshot
. By default, this function returns true
for:
undefined
null
- Empty strings
- Empty arrays
- A plain object without own enumerable properties
All other arguments return false
.
There is also a function
up.util.isPresent()
Show archive.org snapshot
, which returns the opposite of up.util.isBlank()
.
Defining blankness for custom types
Your application might define a custom class (like VideoList
) for which you might want to define your own concept of "blankness". To do so, have your class implement a method named
up.util.isBlank.key
Show archive.org snapshot
and up.util.isBlank()
will use this method to determine blankness.
Example
We have a user-defined Account
class that we want to use with up.util.isBlank()
:
class Account {
constructor(email) {
this.email = email
}
[up.util.isBlank.key]() {
return up.util.isBlank(this.email)
}
}
Note that the protocol method is not actually named 'up.util.isBlank.key'
. Instead it is named after the value of the up.util.isBlank.key
property. To do so, the code sample above is using a
computed property name
Show archive.org snapshot
in square brackets.
We may now use Account
instances with up.util.isBlank()
:
foo = new Account('foo@foo.com')
bar = new Account('')
console.log(up.util.isBlank(foo)) // prints false
console.log(up.util.isBlank(bar)) // prints true
Testing for missing values
JavaScript has both undefined
or null
to represent a missing value. Although there used to be a separate use case for both, the distinction is one of such fine subtlety that today's APIs are arbitrarily using one or the other.
If your code does not care about the distinction, you may use
up.util.isMissing()
Show archive.org snapshot
, which returns true
for both. The opposite is
up.util.isGiven()
Show archive.org snapshot
.