Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
(0, _b.a)()
гарантирует, что функция _b.a
вызывается с this
, установленным для глобального объекта (или если строгий режим включен, undefined
). Если вы должны были называть _b.a()
напрямую, то _b.a
вызывается с this
, установленным на _b
.
(0, _b.a)();
эквивалентно
0; // Ignore result
var tmp = _b.a;
tmp();
( ,
является оператором запятой, см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator ).
Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
blockquote>console.log((1, 2)); // Returns 2 in console console.log((a = b = 3, c = 4)); // Returns 4 in console
Итак, посмотрим пример:
var a = { foo: function() { console.log(this === window); } }; a.foo(); // Returns 'false' in console (0, a.foo)(); // Returns 'true' in console
Теперь в
foo
методthis
равенa
(потому чтоfoo
присоединен кa
). Поэтому, если вы вызываетеa.foo(
), он будет записыватьfalse
в консоли.Но если вы звонили
(0, a.foo)()
. Выражение(0, a.foo)
будет оценивать каждый из его операндов (слева направо) и возвращает значение последнего операнда. Другими словами,(0, a.foo)
эквивалентенfunction() { console.log(this === window); }
. Поскольку эта функция больше не привязана ни к чему, ее
this
является глобальным объектомwindow
. Вот почему он записываетtrue
в консоли при вызове(0, a.foo)()
.
var _a = (0, _b.a)
в начало файла, а затем вызов_a
будет экономить больше места во многих случаях, любая идея, что они этого не сделали? – Andy 28 August 2016 в 23:47_b.a
является (динамическим) геттером. – Rob W 29 August 2016 в 17:37this === undefined
, и вам даже не нужно упоминать глобальный объект – Bergi 16 September 2016 в 12:30