Upload
suman-mukherjee
View
1.971
Download
0
Embed Size (px)
Citation preview
Ruby & Javascript Quirks
Suman Mukherjee
Inspiration for the talk
Gary Bernhardt’s talk @ CodeMash 2012
https://www.destroyallsoftware.com/talks/wat
Javascript
> var1 = var2# ReferenceError: var2 is not defined
> var1ReferenceError: var1 is not defined
Ruby
> var_1 = var_2# NameError: undefined local variable or method var2
> var_1# nil
Javascript
> “John” + {}# 'John[object Object]'
Ruby
> “John” + {}# TypeError: can't convert Hash into String
Javascript
> var3 = var3# ReferenceError: var3 is not defined
Ruby
> var_3 = var_3# nil
Javascript
> [1, 2] + [3, 4]# '1,23,4'
Ruby
> [1, 2] + [3, 4]# [1, 2, 3, 4]
Javascript
Node> {} + []# '[object Object]'
Chrome console> {} + []# 0
Ruby
> {} + []# NoMethodError: undefined method `+' for {}:Hash
Javascript
> [] + {}# '[object Object]'
Ruby
> [] + {}# TypeError: can't convert Hash into Array
Javascript
> [] + []# ‘’
Ruby
> [] + []# []
Javascript
Node> {} + {}# '[object Object][object Object]'
Chrome console> {} + {}# NaN
Ruby
> {} + {}# NoMethodError: undefined method `+' for {}:Hash
Javascript
> “blah” + 3# “blah3”
Ruby
> “blah” + 3 # TypeError: can't convert Fixnum into String
Javascript
> “blah” - 3# NaN
Ruby
> “blah” - 3 # NoMethodError: undefined method `-' for "blah":String
Javascript
> “blah” * 3# NaN
Ruby
> “blah” * 3# "blahblahblah"
Javascript
> parseInt(undefined)# NaN
> parseInt(null)# NaN
> parseInt(“”)# NaN
> undefined.toString()# TypeError: Cannot call method 'toString' of undefined
> null.toString()# TypeError: Cannot call method 'toString' of null
> 10.toString()# SyntaxError
> (10).toString()# ’10’
Ruby
> nil.to_i# 0
> “”.to_i# 0
> nil.to_s# “”
> 10.to_s# “10”
Javascript
> 0/0# NaN
> 0.0/0# NaN
Ruby
> 0/0# ZeroDivisionError: divided by 0
> 0.0/0# NaN
Javascript
> parseFloat(“NaN”)# NaN
Ruby
> “NaN”.to_f# 0.0
Javascript
> “” == false# true
> [] == false# true
> 0 == false# true
Ruby
> “” == false# false
> [] == false# false
> 0 == false# false
Javascript
> 0 && []# 0
> [] && 0# 0
> 0 && “”# 0
> “” && 0# “”
> [] && “”# “”
> “” && []# “”
Ruby
> 0 && []# []
> [] && 0# 0
> 0 && “”# “”
> “” && 0# 0
> [] && “”# “”
> “” && []# []
Javascript
> 5 == ‘5’# true
Ruby
> 5 == ‘5’# false
Javascript
> {“grrrhhh”}# 'grrrhhh'
Ruby
> {“grrrhhh”}# SyntaxError: compile error
Javascript
> “a”===new String(“a”)# false
Ruby
> “a”===String.new(“a”)# true
Thank You
Follow me @mukherjeesuman