Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

fix($parse): treat falsy values as defined in assignment expressions #14990

@gkalpak

Description

@gkalpak

Do you want to request a feature or report a bug?
Bug.

What is the current behavior?
When Angular $parses an assignment expression - e.g. 'foo.toFixed = "bar"' - it treats falsy values as if they don't exist in the context and overwrites them. I.e.:

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via https://plnkr.co or similar (template: http://plnkr.co/edit/tpl:yBpEi4).

// Correct (because `foo` is truthy)
scope.foo = 1;
scope.$eval('foo.toFixed = "bar"');   // --> Error, trying to create property `toFixed` on 1 (expected)
console.log(scope.foo);   // --> `1`

// Incorrect (because `foo` is falsy
scope.foo = 0;
scope.$eval('foo.toFixed = "bar"');
console.log(scope.foo);   // --> `{toFixed: 'bar'}` (unexpected)

What is the expected behavior?
Falsy values should be treated as defined (the same as truthy values).

What is the motivation / use case for changing the behavior?
Doing the right thing 😃

Which versions of Angular, and which browser / OS are affected by this issue? Did this work in previous versions of Angular? Please also test with the latest stable and snapshot (https://code.angularjs.org/snapshot/) versions.
All browsers.
I tested on Angular v1.5.8 and snapshot.

Other information (e.g. stacktraces, related issues, suggestions how to fix)
As suggested by @lgalfaso, the calls to self.not(...) should be replaced with self.notNull(...) at appropriate places (such as here and there).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions