| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3843 人关注过本帖
标题:window.prompt()获取数据类型问题
只看楼主 加入收藏
Yamz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-8-29
收藏
 问题点数:0 回复次数:0 
window.prompt()获取数据类型问题
昨天在测试callee方法时,使用window.prompt()方法获取用户输入的数据,由于使用此方法并不多,忽略了该方法获取的数据类型是string的这一事实。废话不多说,下面举例说明。
为了测试callee方法,使用了以下简单的递归函数:
1.下面的这段代码实际是错误的范例
程序代码:
let o = window.prompt('请输入一个非负整数:');
        function sum(o) {
            if (o == 0) {
                return 0;
            } else {
                return o + sum(o - 1);
            }
        }
        let res = sum(o);
        console.log(res);//'21'
        console.log(typeof (res));//string

错误原因:window.prompt获取的是字符串类型,假设输入的数字为2,即字符串类型的'2'。
因此, return o + sum(o - 1); o为字符串'2',后面加上sum(o - 1),众所周知,字符串的数字与数字进行运算,将会被类型转换再运算,因此这里的sum(o - 1)将会执行sum(1),结果是1,最后函数返回o + 1,此时的o还是字符串类型的'2',字符串与数字相加,加号相当于连接符,所以返回的结果是字符串类型的'21'。
2.正确的示例:
程序代码:
let o = window.prompt('请输入一个非负整数:');
        let p = Number(o);
        let res = (function (p) {
            if (p == 0) {
                return 0;
            } else {
                return p + arguments.callee(p - 1);//因为是匿名函数,所以需要使用arguments.callee获取函数本身的引用。
            }
        })(p);
        console.log(res);

使用Number()方法,将字符串类型的数字转换成数字类型。如果没有这一步,将会计算混乱。因为window.prompt获取的是字符串类型。
话说回来,刚开始发现结果与预期不符的时候并没有直接找出原因。在尝试输入几个不同数字之后发现,结果是n+sum(n)的形式,n为输入的数字,此处的+表示连接符,不表示加法。例如,输入2,返回的结果是21;输入3,返回的结果是33。由此才察觉到是window.prompt获取的数据类型的问题。最后进行数据类型转换,问题才得以解决。





[此贴子已经被作者于2022-4-24 17:18编辑过]

搜索更多相关主题的帖子: 数字 sum window 字符串 获取 
2022-04-24 17:17
快速回复:window.prompt()获取数据类型问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017698 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved