ruby and js quirks

22
Ruby & Javascript Quirks Suman Mukherjee

Upload: suman-mukherjee

Post on 29-Jan-2018

1.971 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Ruby and JS quirks

Ruby & Javascript Quirks

Suman Mukherjee

Page 2: Ruby and JS quirks

Inspiration for the talk

Gary Bernhardt’s talk @ CodeMash 2012

https://www.destroyallsoftware.com/talks/wat

Page 3: Ruby and JS quirks

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

Page 4: Ruby and JS quirks

Javascript

> “John” + {}# 'John[object Object]'

Ruby

> “John” + {}# TypeError: can't convert Hash into String

Page 5: Ruby and JS quirks

Javascript

> var3 = var3# ReferenceError: var3 is not defined

Ruby

> var_3 = var_3# nil

Page 6: Ruby and JS quirks

Javascript

> [1, 2] + [3, 4]# '1,23,4'

Ruby

> [1, 2] + [3, 4]# [1, 2, 3, 4]

Page 7: Ruby and JS quirks

Javascript

Node> {} + []# '[object Object]'

Chrome console> {} + []# 0

Ruby

> {} + []# NoMethodError: undefined method `+' for {}:Hash

Page 8: Ruby and JS quirks

Javascript

> [] + {}# '[object Object]'

Ruby

> [] + {}# TypeError: can't convert Hash into Array

Page 9: Ruby and JS quirks

Javascript

> [] + []# ‘’

Ruby

> [] + []# []

Page 10: Ruby and JS quirks

Javascript

Node> {} + {}# '[object Object][object Object]'

Chrome console> {} + {}# NaN

Ruby

> {} + {}# NoMethodError: undefined method `+' for {}:Hash

Page 11: Ruby and JS quirks

Javascript

> “blah” + 3# “blah3”

Ruby

> “blah” + 3 # TypeError: can't convert Fixnum into String

Page 12: Ruby and JS quirks

Javascript

> “blah” - 3# NaN

Ruby

> “blah” - 3 # NoMethodError: undefined method `-' for "blah":String

Page 13: Ruby and JS quirks

Javascript

> “blah” * 3# NaN

Ruby

> “blah” * 3# "blahblahblah"

Page 14: Ruby and JS quirks

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”

Page 15: Ruby and JS quirks

Javascript

> 0/0# NaN

> 0.0/0# NaN

Ruby

> 0/0# ZeroDivisionError: divided by 0

> 0.0/0# NaN

Page 16: Ruby and JS quirks

Javascript

> parseFloat(“NaN”)# NaN

Ruby

> “NaN”.to_f# 0.0

Page 17: Ruby and JS quirks

Javascript

> “” == false# true

> [] == false# true

> 0 == false# true

Ruby

> “” == false# false

> [] == false# false

> 0 == false# false

Page 18: Ruby and JS quirks

Javascript

> 0 && []# 0

> [] && 0# 0

> 0 && “”# 0

> “” && 0# “”

> [] && “”# “”

> “” && []# “”

Ruby

> 0 && []# []

> [] && 0# 0

> 0 && “”# “”

> “” && 0# 0

> [] && “”# “”

> “” && []# []

Page 19: Ruby and JS quirks

Javascript

> 5 == ‘5’# true

Ruby

> 5 == ‘5’# false

Page 20: Ruby and JS quirks

Javascript

> {“grrrhhh”}# 'grrrhhh'

Ruby

> {“grrrhhh”}# SyntaxError: compile error

Page 21: Ruby and JS quirks

Javascript

> “a”===new String(“a”)# false

Ruby

> “a”===String.new(“a”)# true

Page 22: Ruby and JS quirks

Thank You

Follow me @mukherjeesuman