2010-02-16 19:45:25 -05:00
|
|
|
ok(if my_special_variable? then false else true)
|
2010-01-01 12:41:55 -05:00
|
|
|
|
|
|
|
my_special_variable: false
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok(if my_special_variable? then true else false)
|
2010-01-16 23:03:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Existential assignment.
|
|
|
|
|
|
|
|
a: 5
|
|
|
|
a: null
|
|
|
|
a ?= 10
|
|
|
|
b ?= 10
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok a is 10 and b is 10
|
2010-01-16 23:03:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
# The existential operator.
|
|
|
|
|
|
|
|
z: null
|
|
|
|
x: z ? "EX"
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok z is null and x is "EX"
|
2010-01-17 14:23:41 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Only evaluate once.
|
|
|
|
|
|
|
|
counter: 0
|
2010-01-26 10:52:05 -05:00
|
|
|
get_next_node: ->
|
2010-01-17 14:23:41 -05:00
|
|
|
throw "up" if counter
|
|
|
|
counter++
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok(if get_next_node()? then true else false)
|
2010-01-23 23:30:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Existence chains, soaking up undefined properties:
|
|
|
|
|
|
|
|
obj: {
|
|
|
|
prop: "hello"
|
|
|
|
}
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok obj?.prop is "hello"
|
2010-01-23 23:30:55 -05:00
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok obj.prop?.length is 5
|
2010-02-02 10:39:44 -05:00
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok obj?.prop?.non?.existent?.property is undefined
|
2010-01-24 12:52:15 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Soaks and caches method calls as well.
|
|
|
|
|
|
|
|
arr: ["--", "----"]
|
|
|
|
|
2010-02-16 19:45:25 -05:00
|
|
|
ok arr.pop()?.length is 4
|
|
|
|
ok arr.pop()?.length is 2
|
|
|
|
ok arr.pop()?.length is undefined
|
|
|
|
ok arr[0]?.length is undefined
|
|
|
|
ok arr.pop()?.length?.non?.existent()?.property is undefined
|
2010-02-20 20:00:07 -05:00
|
|
|
|
|
|
|
|
|
|
|
# Soaks method calls safely.
|
|
|
|
value: undefined
|
|
|
|
result: value?.toString().toLowerCase()
|
|
|
|
|
|
|
|
ok result is undefined
|
|
|
|
|
|
|
|
value: 10
|
|
|
|
result: value?.toString().toLowerCase()
|
|
|
|
|
|
|
|
ok result is '10'
|
|
|
|
|