function isEmpty(value) {
  return isUndefined(value) || value === '' || value === null || value !== value;
}
@ngdoc inputType
@name angular.module.ng.$compileProvider.directive.input.checkbox

@description
HTML checkbox.

@param {string} ng-model Assignable angular expression to data-bind to.
@param {string=} name Property name of the form under which the control is published.
@param {string=} ng-true-value The value to which the expression should be set when selected.
@param {string=} ng-false-value The value to which the expression should be set when not selected.
@param {string=} ng-change Angular expression to be executed when input changes due to user
   interaction with the input element.

@example
      <doc:example>
        <doc:source>
         <script>
           function Ctrl($scope) {
             $scope.value1 = true;
             $scope.value2 = 'YES'
           }
         </script>
         <form name="myForm" ng-controller="Ctrl">
           Value1: <input type="checkbox" ng-model="value1"> <br/>
           Value2: <input type="checkbox" ng-model="value2"
                          ng-true-value="YES" ng-false-value="NO"> <br/>
           <tt>value1 = {{value1}}</tt><br/>
           <tt>value2 = {{value2}}</tt><br/>
          </form>
        </doc:source>
        <doc:scenario>
          it('should change state', function() {
            expect(binding('value1')).toEqual('true');
            expect(binding('value2')).toEqual('YES');

            input('value1').check();
            input('value2').check();
            expect(binding('value1')).toEqual('false');
            expect(binding('value2')).toEqual('NO');
          });
        </doc:scenario>
      </doc:example>