鸡兔同笼问题

2017-06-02  本文已影响0人  木木口丁

Code

<!DOCTYPE html>
<html>
<head>
    <title>Chicken And Rabbit</title>
    
</head>
<body>
<div class="wrap">
    <div>
        <input type="text" name="" id="head" placeholder="Please insert head quantity">
        <input type="text" name="" id="leg" placeholder="Please insert leg quantity">
        <input type="button" name="" id="btn" value="Calculate">
    </div>
    <div id="tip"></div>
    <div id="answer">
        <p>Chicken :<strong></strong></p>
        <p>Rabbit :<strong></strong></p>
    </div>
</div>
</body>
<script type="text/javascript">
        var headInput = document.getElementById('head');
        var legInput = document.getElementById('leg');
        var btn = document.getElementById('btn');
        var tip = document.getElementById('tip');
        var results = document.getElementById('answer').getElementsByTagName('strong');

        btn.onclick = function() {
            results[0].innerHTML = "";
            results[1].innerHTML = "";
            var headVal = Number(headInput.value);
            var legVal = Number(legInput.value);
            var sum = headVal + legVal;

            if (sum != sum) {
                tip.innerHTML = "Please insert number";
            } else if (parseInt(sum) != sum) {
                tip.innerHTML = "Please insert INT number";
            } else {
                var resultObj = calculate(headVal, legVal);
                if (JSON.stringify(resultObj) == '{}') {
                    tip.innerHTML = "The number provided can't get results";
                } else {
                    tip.innerHTML = "";
                    results[0].innerHTML = resultObj.chicken;
                    results[1].innerHTML = resultObj.rabbit;
                }
            }
        }

        function calculate(head, leg) {
            var result = {};
            var rabbit = leg / 2 - head;
            var chicken = head - rabbit;
            if (rabbit * chicken > 0 && parseInt(rabbit) == rabbit) {
                result = {
                    'rabbit' : rabbit,
                    'chicken' : chicken
                }
            };
            return result;
        }
    </script>
</html>

细节

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)。属性的所有权是通过判断该属性是否直接属于某个对象决定的,而不是通过原型链继承的。一个对象的所有的属性可以一次性的获取到。

上一篇 下一篇

猜你喜欢

热点阅读