Yeah. Basically, AppleScript concatenations go like this:
-- Pseudocode. Don't try to compile!
If the item (or result) to the left of '&' is a list, a record, or a text then
if the item to the right is of the same class as the item to the left then
concatenate the two items
else if the item to the right can be coerced to the same class as the item to the left then
implicitly coerce the item to the right to that class
concatenate the item to the left and the result
else
error
end if
else
create a list containing the two items, in the same left-right order
end if
--> The result of a concatenation is always a new object, not an extended original.
For completeness, although straying somewhat from the thread topic, here are a few consequences which people don’t often have to consider:
{1, 2} & "Hello"
--> {1, 2, "Hello"} ("Hello" was coerced to list before the actual concatenation.)
{1, 2} & {"Hello"}
--> {1, 2, "Hello"} (Same result. {"Hello"} was already a list.)
{1, 2} & {{"Hello"}}
--> {1, 2, {"Hello"}}
{1, 2} & {a:3}
--> {1, 2, 3} (The record was coerced to list before the actual concatenation.)
{1, 2} & {{a:3}}
--> {1, 2, {a:3}}
{} & {a:3}
--> {a:3} ({} can be either an empty list or an empty record for concatenation purposes.)
And of course the effect when concatenating records:
{a:1, b:2, c:3} & {a:10, c:30, y:40, z:50}
--> {a:1, b:2, c:3, y:40, z:50} (Properties from both records, values of common properties from the left record.)