鸡兔同笼问题

Code




    Chicken And Rabbit
    


Chicken :

Rabbit :

细节

1. 数学计算

鸡数x,兔数y,总头a,总腿b
x + y = a
2x + 4y = b
-------> y = b / 2 - a

2.Number()方法
用于将字符串转化为数字
如果输入的不是合法数字,Number()将返回NaN

3.判断输入的是否为数字
isNaN()方法
如果非数字,返回true

4.整数检测
输入值不能是小数
用parseInt()方法取整后再做判断

5.没有内容的对象的检测
{} == {}; ?
不可行,因为这是两个对象
处理方法:
1)枚举

var obj = {};
function checkObj(obj) {
    for(var i in obj) {
        if(obj.hasOwnProperty(i)){
            return false; // 不为空对象
        }
    }
    return true; // 空对象,返回true
}
checkObj(obj);

对于没有内容的空对象({}),i并不会被赋值,for-in中的内容也不会执行

2)Object.keys(obj)

var obj = {};
var checkResult = Object.keys(obj);
console.log(checkResult.length);

该方法类似于枚举,但是,是直接调用Object的keys方法,方法的返回值为所有可枚举属性的字符串数组。如果当前对象为空({}),则返回一个空数组

3)JSON.stringify()

var obj = {};
console.log(JSON.stringify(obj) == '{}')

JSON.stringify()方法,用于将JSON对象解析为字符串,即可和{}比较

4)Object.getOwnPropertyNames(obj)

var obj = {};
var checkResult = Object.getOwnPropertyNames(obj);
console.log(checkResult.length);

返回对象自己的属性的名称,返回值为一个数组,因此可以通过length属性,进行判断,如果length长度为0,则代表该对象为空

属性的可枚举性和所有权

可枚举属性是指那些内部 “可枚举” 标志设置为 true 的属性,对于通过直接的赋值和属性初始化的属性,该标识值默认为即为 true,对于通过 Object.defineProperty 等定义的属性,该标识值默认为 false。可枚举的属性可以通过 for...in 循环进行遍历(除非该属性名是一个 Symbol)。属性的所有权是通过判断该属性是否直接属于某个对象决定的,而不是通过原型链继承的。一个对象的所有的属性可以一次性的获取到。

你可能感兴趣的:(鸡兔同笼问题)