Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

Well, .join(x) joins an array into a string, with x as the separator. First of all what does Array(16) make? Effectively it should make an array with null 16 times. Now, JavaScript seems to think null is a blank string, a string with the text 'null', or a zero depending on the context.

The first thing it should do is TypeError that null is not a string. Or don't join null fields because there is nothing there.

If is does convert null to '', then it should TypeError on string - int. If it is not going to TypeError it should do something sensible, like slice the string

  > Array(16).join("wat".slice(0,-1)) + " Batman!"
  'wawawawawawawawawawawawawawawa Batman!'
I think the correct thing would be to TypeError in two different places. Or change the language so things that don't error actually work. Returning a string with NaNs in it will just lead to uncaught errors. If it actually returns something it should probably be ' Batman!'.

JavaScript nuttiness:

Now it's zero:

  > null + 1
  1
Now it's "null":

  > null + "text"
  'nulltext'
Now it's a blank string:

  > [null, null, null].join()
  ',,'
Python errors when things don't make sense, and forces you to make them make sense:

If it doesn't work, error:

  >>> "wat" - 1
  Traceback (most recent call last):
	  File "<stdin>", line 1, in <module>
  TypeError: unsupported operand type(s) for -: 'str' and 'int'
Can't join None into a string:

  >>> ','.join([None, None, None])
  Traceback (most recent call last):
	  File "<stdin>", line 1, in <module>
  TypeError: sequence item 0: expected string, NoneType found
Convert None to a string if you want:

  >>> ','.join([str(i) for i in [None, None, None]])
  'None,None,None'
But it makes more sense to drop the None:

  >>> ','.join([str(i) for i in [None, None, None] if i])
  ''


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: