--- title: Types --- Liquid objects can have one of six types: - [string](#string) - [number](#number) - [boolean](#boolean) - [nil](#nil) - [array](#array) - [EmptyDrop](#emptydrop) Liquid variables can be initialized by using the [assign](/tags/#assign) or [capture](/tags/#capture) tags. ## String Strings are declared by wrapping a variable's value in single or double quotes. {% highlight liquid %} {% raw %} {% assign my_string = "Hello World!" %} {% endraw %} {% endhighlight %} ## Number Numbers include floats and integers. {% highlight liquid %} {% raw %} {% assign my_int = 25 %} {% assign my_float = 39.756 %} {% endraw %} {% endhighlight %} ## Boolean Booleans are either `true` or `false`. No quotations are necessary when declaring a boolean. {% highlight liquid %} {% raw %} {% assign foo = true %} {% assign bar = false %} {% endraw %} {% endhighlight %} ## Nil Nil is a special empty value that is returned when Liquid code has no results. It is **not** a string with the characters "nil". Nil is treated as false in the conditions of `if` blocks and other Liquid tags that check the truthfulness of a statement. In the following example, if the user does not exist (that is, `user` returns `nil`), Liquid will not print the greeting: {% highlight liquid %} {% raw %} {% if user %} Hello {{ user.name }}! {% endif %} {% endraw %} {% endhighlight %} Tags or outputs that return `nil` will not print anything to the page.
{% highlight liquid %}{% raw %} The current user is {{ user.name }} {% endraw %}{% endhighlight %}
{% highlight text %}{% raw %} The current user is {% endraw %}{% endhighlight %}
## Array Arrays hold lists of variables of any type. ### Accessing items in arrays To access all of the items in an array, you can loop through each item in the array using a [for](/tags/#for) or [tablerow](/tags/#tablerow) tag.
{% highlight liquid %}{% raw %} {% for user in site.users %} {{ user }} {% endfor %} {% endraw %}{% endhighlight %}
{% highlight text %}{% raw %} Tobi Lina Tetsuro Adam {% endraw %}{% endhighlight %}
### Accessing specific items in arrays You can use square bracket `[ ]` notation to access a specific item in an array. Array indexing starts at zero.
{% highlight liquid %}{% raw %} {{ site.users[0] }} {{ site.users[1] }} {{ site.users[3] }} {% endraw %}{% endhighlight %}
{% highlight text %}{% raw %} Tobi Lina Adam {% endraw %}{% endhighlight %}
### Initializing arrays You cannot initialize arrays using pure Liquid. You can, however, use the [split](/filters/#split) filter to break a single string into an array of substrings. ## EmptyDrop An EmptyDrop object is returned if you try to access a deleted object (such as a page or post) by its [handle](/basics/#Handles). In the example below, `page_1`, `page_2` and `page_3` are all EmptyDrop objects. {% highlight liquid %}{% raw %} {% assign variable = "hello" %} {% assign page_1 = pages[variable] %} {% assign page_2 = pages["does-not-exist"] %} {% assign page_3 = pages.this-handle-does-not-exist %} {% endraw %}{% endhighlight %} EmptyDrop objects only have one attribute, `empty?`, which is always *true*. Collections and pages that *do* exist do not have an `empty?` attribute. Their `empty?` is “falsy”, which means that calling it inside an if statement will return *false*. When using an unless statement on existing collections and pages, `empty?` will return `true`. ### Checking for emptiness Using the `empty?` attribute, you can check to see if an object exists or not before you access any of its attributes. {% highlight liquid %}{% raw %} {% unless pages.about.empty? %}

{{ pages.frontpage.title }}

{{ pages.frontpage.content }}
{% endunless %} {% endraw %}{% endhighlight %} If you don't check for emptiness first, Liquid may print empty HTML elements to the page: {% highlight html %}{% raw %}

{% endraw %}{% endhighlight %}