From dc52afc39738a0eb251d96dd9cffa402aaea7c74 Mon Sep 17 00:00:00 2001 From: Francisco Ruiz Date: Fri, 17 Mar 2017 14:36:15 +0100 Subject: [PATCH 1/3] Update object-literal.md The example was wrong. It stated that ?= is similar to JS || when the || will affect not only not defined scenario but also any falsy values (values that evaluate as false) There are way to many differences between the 2: 1. window.var = false; 2. window.var = 0; 3. window.var = ''; 4. window.var = []; 5. window.var = null; window.var ?= 'something' console.log(window.var) -> 1. false 2. 0 3. '' 4. [] 5. 'something' window.var ||= 'something' console.log(window.var) -> 1. 'something' 2. 'something' 3. 'something' 4. [] 5. 'something' --- .../classes_and_objects/object-literal.md | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/chapters/classes_and_objects/object-literal.md b/chapters/classes_and_objects/object-literal.md index 7d9d2f0..c68ea0d 100644 --- a/chapters/classes_and_objects/object-literal.md +++ b/chapters/classes_and_objects/object-literal.md @@ -20,7 +20,29 @@ window.MY_NAMESPACE ?= {} This is equivalent to the following JavaScript: {% highlight javascript %} -window.MY_NAMESPACE = window.MY_NAMESPACE || {}; +if(window.MY_NAMESPACE == null) { + window.MY_NAMESPACE = window.MY_NAMESPACE +} {% endhighlight %} -Common JavaScript technique, using object literal to define a namespace. This saves us from clobbering the namespace if it already exists. +## Problem + +You want to make a conditonal assignment if it does not exists or if it is falsy (empty, 0, null, false) + +## Solution + +Use the Conditional assignment operator + +{% highlight coffeescript %} +window.my_variable ||= {} +{% endhighlight %} + +## Discussion + +This is equivalent to the following JavaScript: + +{% highlight javascript %} +window.my_variable = window.my_variable || {}; +{% endhighlight %} + +Common JavaScript technique, using conditional assignment to ensure that we have an object that is not falsy From b16bc5fbfb280df517beb6131f8cc1012934299c Mon Sep 17 00:00:00 2001 From: Francisco Ruiz Date: Fri, 17 Mar 2017 16:06:45 +0100 Subject: [PATCH 2/3] Update object-literal.md --- chapters/classes_and_objects/object-literal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/classes_and_objects/object-literal.md b/chapters/classes_and_objects/object-literal.md index c68ea0d..336de89 100644 --- a/chapters/classes_and_objects/object-literal.md +++ b/chapters/classes_and_objects/object-literal.md @@ -21,7 +21,7 @@ This is equivalent to the following JavaScript: {% highlight javascript %} if(window.MY_NAMESPACE == null) { - window.MY_NAMESPACE = window.MY_NAMESPACE + window.MY_NAMESPACE = {}; } {% endhighlight %} From 322524f482e6e2e968d77a531233bb0bf5386fa4 Mon Sep 17 00:00:00 2001 From: Francisco Ruiz Date: Fri, 17 Mar 2017 16:34:33 +0100 Subject: [PATCH 3/3] Update object-literal.md --- chapters/classes_and_objects/object-literal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapters/classes_and_objects/object-literal.md b/chapters/classes_and_objects/object-literal.md index 336de89..602ccf3 100644 --- a/chapters/classes_and_objects/object-literal.md +++ b/chapters/classes_and_objects/object-literal.md @@ -20,7 +20,7 @@ window.MY_NAMESPACE ?= {} This is equivalent to the following JavaScript: {% highlight javascript %} -if(window.MY_NAMESPACE == null) { +if(window.MY_NAMESPACE === null || window.MY_NAMESPACE === undefined) { window.MY_NAMESPACE = {}; } {% endhighlight %}