关于parseInt的看法

来源:http://www.prospettivedarte.com 作者:计算机教程 人气:78 发布时间:2019-05-10
摘要:​ 前面在看题目的时候 偶然看到 使用parseInt 来进行整数判断但是这里的parseInt是错误示范 前几天一直整理项目答辩的材料,制作脑图,所以没时间。今天有空了,做了一下这套题,简

​ 前面在看题目的时候 偶然看到 使用parseInt 来进行整数判断 但是这里的parseInt是错误示范

前几天一直整理项目答辩的材料,制作脑图,所以没时间。今天有空了,做了一下这套题,简答题写的很简略,只是按自己的第一思路写了个过程,具体的就往下看吧。

之后了解了一下 发现这和函数 很有研究

不定向选择题部分

1.使用了"use strict"后,以下哪些描述错误

"use strict";
var x = 17;
with (obj) {
x;
}
//会报obj未定义的错误

"use strict";
var x;
delete x;
//运行正常

function f(a){
"use strict";
a = 42;
return a==arguments[0];
}
f(5); //运行结果为true

function f(str){
"use strict";
return eval(str);
}
f(‘alert(1)’);
//运行正常,弹窗1的对话框

解答:这道题考察了严格模式的具体限制,在项目里所有的js文件都出现了这行代码,针对于题来说:
a.严格模式不能使用with语句
b.严格模式不能直接删变量,只有当configurable设置为true时才能删
c.所有变量必须有声明,不能为空
d.严格模式加入了eval作用域,没问题
链接:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

2.以下输出结果为true的有

A." ’’==false
B." ’’==0
C." ’’==[]
D." ’’=={}

解答:这道题考察了基本数据类型的比较,基本方法如下:

如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0,true 为 1。
如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串。
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。

3.问输出结果

var a = 0;
function b(c) {
console.log(a);
var a = 1;
arguments[0] = 2;
console.log(c);
console.log(a);
}
b(3);
console.log(a);

解答:这道题我做错了,是因为我没有理解argument数组的用法,argument数组装的是各形参的值,在function里只用一个形参c,所以argument[0]代表就是c,所以 arguments[0] = 2;会覆盖实例化传入的实参3。
a,因为a会先在函数的作用域找a的声明,但是有a的声明和赋值在后面。所以会默认为没有定义,返回undefined,后面就不用说了

4.以下代码的执行后将输出()

var a = 0;
var obj = {
a:'obj',
b:function(a){
setTimeout(function(){
console.log(this.a);
},1000)
}
}
obj.b(1);

解答:这道题考察了setTimeout中回调函数的this是指向window的,所以答案很明显,就是0

5.以下运算结果不是number类型的是

A."a"-1
B.1/0
C.0 && "a"
D.new Number(1)

解答:参考第二题,D是对象没的说,关键是C返回的是Infinity,它也是number类型,所以选A,B,C

6.[“1", "2", "3"].map(parseInt)的执行结果是?

解答:这道题之前见过一次,答案是[1,NaN,NaN]

正规格式是parseInt(string,radix)。
第一个参数是被解析的字符串,第二个参数是进制(可不些)
第二个参数的特点:
①如果radix省略或为0,则按默认进制(十进制)进行解析

②radix为2~36之间的整数,如果在这个范围之外,返回NaN

③string的首字符为0,则默认解析为8进制。string首字符为0x(0X)则默认解析为16进制。其他情况默认为10进制。

④最好加上第二个参数,不然即使碰到首字符为0,应该以8进制方式进行,在某些浏览器下,如ff也会按10进制进行
所以原式就成了
parseInt('1',0);parseInt('2',1);parseInt('3',2)

先看看 w3c怎么说这个的

parseInt() 函数可解析一个字符串,并返回一个整数。
string  必需。要被解析的字符串。
radix   
    可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

    如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

    如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

说实话 虽然我没有比较好的描述,但是觉的他的解释并不好 看不懂

我们来看看当没有 radix这个参数的时候 parseInt()是如何解析的

如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数

如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。

如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

以及注意事项

注释:只有字符串中的第一个数字会被返回。

注释:开头和结尾的空格是允许的。

提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。

实例

parseInt('12',10)    //10
parseInt(11,2,10)    //3 只解析前两位   这里将 11 转化为2禁止 也就是 0011 也就是 3
parseInt(   11   ,2) //3 空格不影响结果
parseInt("dasas",2)  // NaN 运算发生错误

接下来让我们看看 为什么 parseInt不适合判断是否整数

parseInt(0.000001, 10)    // 0
parseInt(0.0000001, 10)   //1 为什么会是1 !
parseInt(10000000000000,10)    //10000000000000 
parseInt(10000000000000000000000000000,10)  // 1 

因为 0.0000001 会被科学计算转化为1e-7 于是parseInt就进行识别 1 认识 e不认识 返回 10进制的1 结果为 1

10000000000000000000000000000 => 1e 28 所以为1

所有 这里数字过小 过大就不再适合 使用parseInt来进行判断

拓展

console.log(parseInt(1/0,19))      //18
console.log(parseInt(false,16))    //250
console.log(parseInt(parseInt,16)) //15
console.log(parseInt('0x10'))      //16
console.log(parseInt('10',2))      //2

这是我在别人博客看到的 这些都会了 parseInt就没问题了

本文由皇牌天下投注网发布于计算机教程,转载请注明出处:关于parseInt的看法

关键词:

上一篇:遮罩层提示框,可拖动标题栏(兼容FF)

下一篇:没有了

最火资讯