Node dev : getNodeParameter usage?

I think you are mixing up two different things.

An item is the whole object. So if a node receives this input data:

[
	{
		json: {
    			"brand" : "philips",	
	    		"other" : "whatever1"
		}
	},
	{
		json: {
	    		"other" : "whatever2"
		}
	}
]

It would have two items. So if you write this code:

const items = this.getInputData();

You will have in items EXACTLY the above array.
Here the documentation about the n8n datastructure:

If your node has a parameter called “brandName” with the following expression set: X{{ $json["brand"] }}X and you request its content via getNodeParameter you will get the following output:

this.getNodeParameter('brandName', 0) => "XphilipsX"
this.getNodeParameter('brandName', 1) => "XX"

By default there is no relationship between the node input data (the data it receives from the previous node) and the parameters (the parameters which are set on the node) at all. They are totally independent. So if you simply set the node parameter “brandName” to “test” you would always get “text” back, no matter which index you supply. Only if you set an expression on it will you maybe receive different data depending on the index you supply (depending on the expression).

So the index you supply tells n8n which item (so the whole object, in the above example there are two different ones) should be used to evaluate the expression.