# JavaScript: check if function parameter is a string or an object

If a function takes a DOM element as a parameter, **it can be a string, or a
jQuery object**, for example. Or why not both? With a small conditional check
it's possible.

Take the following example, where the function simply gets an element's
dimensions and returns and object:

```js
var getElementDimensions = function (el) {
  var $el = $(el)

  return {
    width: $el.width(),
    height: $el.height(),
  }
}
```

It expects the only parameter to be a string. But wouldn't it be nice if it
could be a jQuery object also? Turns out it's pretty easy to do:

```js
if (typeof myVar == 'string' || myVar instanceof String) {
  // Sting
} else {
  // Not a string. Since the function only takes
  // a string or an object, this level of checking
  // should be sufficient
}
```

This is exactly what ternary conditional statements are made for, the function
in its final form:

```js
/**
 * Gets element height and width as an array
 * @param  {mixed}  elem jQuery object or a string
 * @return {object}      Object with two nodes, width, and height
 */
var getElementDimensions = function (el) {
  // Check if parameter is string or object
  var $el = typeof el == 'string' || el instanceof String ? $(el) : el

  return {
    width: $el.width(),
    height: $el.height(),
  }
}
```

Usage example:

```js
// Give it a jQuery object
var $el = $('#some-element')
var dim = getElementDimensions($el)

// Or just a string
var dim = getElementDimensions('.some-element')

// Either way, `dim` now has width and height
console.log(dim.width)
console.log(dim.height)
```
