73 lines
1.2 KiB
JavaScript
73 lines
1.2 KiB
JavaScript
var x = 0;
|
|
var sets = 0;
|
|
var obj = {
|
|
get x() {
|
|
return x;
|
|
},
|
|
|
|
set x(value) {
|
|
sets++;
|
|
x = value;
|
|
},
|
|
};
|
|
|
|
expect(obj.x ||= 1).toBe(1);
|
|
expect(sets).toBe(1);
|
|
expect(obj.x ||= 2).toBe(1);
|
|
expect(sets).toBe(1);
|
|
|
|
expect(obj.x &&= 0).toBe(0);
|
|
expect(sets).toBe(2);
|
|
expect(obj.x &&= 3).toBe(0);
|
|
expect(sets).toBe(2);
|
|
|
|
var gets = 0;
|
|
var deep = {
|
|
get obj() {
|
|
gets++;
|
|
return obj;
|
|
},
|
|
};
|
|
|
|
expect(deep.obj.x ||= 1).toBe(1);
|
|
expect(gets).toBe(1);
|
|
expect(deep.obj.x ||= 2).toBe(1);
|
|
expect(gets).toBe(2);
|
|
|
|
expect(deep.obj.x &&= 0).toBe(0);
|
|
expect(gets).toBe(3);
|
|
expect(deep.obj.x &&= 3).toBe(0);
|
|
expect(gets).toBe(4);
|
|
|
|
var key = 0;
|
|
expect(obj[++key] ||= 1).toBe(1);
|
|
expect(key).toBe(1);
|
|
key = 0;
|
|
expect(obj[++key] ||= 2).toBe(1);
|
|
expect(key).toBe(1);
|
|
|
|
key = 0;
|
|
expect(obj[++key] &&= 0).toBe(0);
|
|
expect(key).toBe(1);
|
|
key = 0;
|
|
expect(obj[++key] &&= 3).toBe(0);
|
|
expect(key).toBe(1);
|
|
|
|
key = 0;
|
|
expect(deep.obj[++key] ||= 1).toBe(1);
|
|
expect(gets).toBe(5);
|
|
expect(key).toBe(1);
|
|
key = 0;
|
|
expect(deep.obj[++key] ||= 2).toBe(1);
|
|
expect(gets).toBe(6);
|
|
expect(key).toBe(1);
|
|
|
|
key = 0;
|
|
expect(deep.obj[++key] &&= 0).toBe(0);
|
|
expect(gets).toBe(7);
|
|
expect(key).toBe(1);
|
|
key = 0;
|
|
expect(deep.obj[++key] &&= 3).toBe(0);
|
|
expect(gets).toBe(8);
|
|
expect(key).toBe(1);
|