Создание списка orig
исключает необходимость перезагрузки / повторного просмотра csv:
orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';'))
Обычно я использую оператор typeof
:
if (typeof obj.foo !== 'undefined') {
// your code here
}
Он вернет "undefined"
либо если свойство не существует, либо его значение равно undefined
.
(См. Также: Разница между undefined
и не определенным. )
Есть и другие способы выяснить, существует ли свойство у объекта, например Метод hasOwnProperty
:
if (obj.hasOwnProperty('foo')) {
// your code here
}
И оператор in
:
if ('foo' in obj) {
// your code here
}
Разница между двумя последними состоит в том, что метод hasOwnProperty
проверяет, существует ли свойство физически на объекте (свойство не наследуется).
Оператор in
проверит все свойства, доступные в цепочке прототипов, например:
var obj = { foo: 'bar'};
obj.hasOwnProperty('foo'); // true
obj.hasOwnProperty('toString'); // false
'toString' in obj; // true
Как видите, hasOwnProperty
возвращает false
а оператор in
возвращает true
при проверке метода toString
, этот метод определяется в цепочке прототипов, поскольку obj
наследует форму Object.prototype
.
let test = {
a: {
b: [0, 1]
}
};
console.log(test.isset('a.b')) // true
console.log(test.isset('a.b.1')) // true
console.log(test.isset('a.b.5')) // false
console.log(test.isset('a.c')) // false
console.log('abv'.isset('0')) // true
isset('user.permissions.saveProject', args);
function isset(string, context) {
try {
var arr = string.split('.');
var checkObj = context || window;
for (var i in arr) {
if (checkObj[arr[i]] === undefined) return false;
checkObj = checkObj[arr[i]];
}
return true;
} catch (e) {
return false;
}
}