Separate expressions - a bit between commas - are evaluated, then the general expression takes on the value of the latter. Therefore, listing a number of numeric and string literals, such as your example, is pointless:
(1, 'a', 5, ... 'b') // does the same thing as ('b')
... so that you could leave everything but the last. However, if individual expressions have different effects because they are functional calls or assignments, you cannot leave them.
The one good reason I can think of using this syntax is in the for statement, because the for syntax is:
for([init]; [condition]; [final-expression])
... does not allow the use of semicolons in the [init] or in the [condition] or [final-expression] parts. But you can include multiple expressions with commas:
for(x = 0, y = 100, z = 1000; x < y; x++, y--, z-=100) { ... }
nnnnnn
source share