If buffers are created or copied depends on what constructor you use(see the page you linked), if you use the typed array directly (as with regular arrays) you get a copy BUT if you use the underlying buffer object instead then you're instead given a view. The example below should show the difference in usage (you can test it in chrome,firefox or node)
var x=new Uint32Array(); // array copy construction
var y=new Int32Array(x); // typed array copy construction
console.log(x+","+y); // prints 123,-44
var z=new Int32Array(x.buffer); // using the view creation constructor (notice the buffer)
console.log(x+","+y+","+z); // prints 145,-44,145
console.log(x+","+y+","+z); // prints 4294967151,-44,-145
In the first printout x retains it's value since y got a separate buffer via the copy constructor.
For the second printout however x has changed the value when we changed z since they share the same underlying buffer, in this example you see why one can use either Int32Array or Uint32Array since the representation is the same for positive integers below 2^31.
The third printout again changes x when z is changed due to using the same buffer but this time the values shown are different, this is because negative numbers has the top sign bit set and this is where the unsigned and signed representations of 32bit integers differ.
For unsigned numbers the top bit means that the value is between 2^31 and 2^32-1 (2147483648 to 4294967295) whereas for signed numbers this means that the number is negative.
Anyhow, as i said before. For mesh indices you're unlikely to have 2147483648 indices or more so using Int32 or Uint32 won't matter much today.