Thanks jan, sorry not clear yet … maybe I’m not clear myself 
Lexicon :
“property” => got from the node form, for example “Request method” in the Http-request node
“parameter” => got from the previous node output, it can be read in $json for example in a Function node
Getting a property is easy :
const myBrand = this.getNodeParameter('brand', 0) as string;
This works, here the index is 0, so it means something, but I admit that this arg “is not set” as you say. So yes I get the value of ‘brand’ set in the node form.
Now imagine this property ‘brand’ is optional in my node, because it can be read as a parameter from the previous node (yes, some properties can be dynamic depending of the state of the WF), so I suppose the input like this :
{
"other" : "whatever",
"brand" : "philips",
etc ...
}
So I understand that the ‘parameter’ method :
const myBrand = this.getNodeParameter('brand', 0) as string;
will return undef/empty.
But, during the loop on items, the variable myBrand with take the value ‘philips’ when index will be 1, and won’t be affected if i != 1. So we loop because we don’t know the order or parameters. Right ?
But … imagine “brand” is at the first position in the json input, the get-property will work as a get-parameter because index 0 is right, so the variable myBrand, if it has been set in the form, will be overwritten with the parameter value, no?