Não ocorre erro acesso propriedade inválida no Json

Estou começando a utilizar classes Json no protheus e observei um comportamento que achei estranho. Se eu criar um objeto Json com algumas propriedades, e eu tentar acessar uma propriedade que não existe neste objeto o sistema não apresenta qualquer erro. No meu caso foi um erro de digitação mesmo, então fiquei tentando achar o erro até ver que havia errado uma letra, no meu entendimento o sistema deveria apresentar um erro ao tentar ler uma propriedade que não existe assim como um objeto convencional, isso traria muito mais confiabilidade para o sistema.

Existe algum motivo para esse comportamento? No meu pouco entendimento desse objeto considero isso um defeito.

Abaixo um pequeno exemplo do que estou falando:


Local oTempJson    :=    JsonObject():New()        AS Json

//Aqui normal entendo que estou criando as propriedades
oTempJson['prop1']    := 'teste'
oTempJson['prop2']    := 'teste2'

//agora vou acessá-las

conout(ValType(oTempJson['prop1']))    //tudo certo!
conout(ValType(oTempJson['porp2']))    //aqui apresenta NULL, deveria dar errolog

Olá,

O comportamento é esse mesmo, se você acessar um valor via colchetes e esse valor não existir, será retornado nil.

Se você deseja verificar a existência de uma propriedade no json, utilize o método HasProperty.

Documentação: https://tdn.totvs.com/display/tec/Classe+JsonObject


Abaixo um exemplo em Javascipt que tem o mesmo comportamento, apenas para comparação:


let oTempJson = {};

oTempJson['prop1'] = 'teste';
oTempJson['prop2'] = 'teste2';

console.log(typeof oTempJson['prop1']);
console.log(typeof oTempJson['porp2']);

Você pode testar isso diretamente em seu navegador e verá que o resultado é semelhante, porém o Javascript tem o conceito de undefined e de null, logo os resultados não serão exatamente os mesmos.

Muito incomum esse tipo de comportamento, acho até que deveria ser melhorado, mesmo sendo derivado do JavaScript, esse tipo de comportamento gera muitos erros difíceis de identificar, e não haveria nenhum prejuízo em ser mais rígido nesse cenário, deixaria o programa mais robusto. Mais uma vez obrigado pelo esclarecimento Daniel.

Se esse comportamento mudar, o Protheus nem mesmo seria aberto, talvez nem mesmo a compilação funcione :smiley: