JS值——学习小Demo之关于假值、绝对相等、强弱类型转换应用、symbol、-0

来源:互联网 发布:java转json忽略字段 编辑:程序博客网 时间:2024/06/05 01:00

   这些是我前段时间复习JS基础——值时用的几个小demo,都是一些比较实用的,应该对初学者的知识扩展知识巩固有点帮助,因为当初打的时候比较随便就比较乱,很多也删掉了,就留下这几个。我也尽可能的加了注释方便理解。总之,JS基础还是很重要的,是不是回顾一下还是会有不同的感受。特别是,当你初学完一轮再次带着JS这门语言宏观的角度来看的时候。第一遍我也是泛泛的读了一下红宝书,学的时候感觉自己理解很快,JS挺简单的,挺容易理解的。学完后,发现自己好像什么都没学到,浅浅的学习只能得到一门语言大概的轮廓,想要学会一门语言还是得细细琢磨的。不过,带着轮廓琢磨在我看来是学习很好的方法。我也是个初学者,可能会有很多错误,欢迎指出,多多交流。

console.log(Object.is(NaN,NaN));//ES6新加的!也可以通过下列函数在不支持ES6的浏览器中实现//关于两个值是否绝对相等object1is = function(v1,v2){if (v1 === 0 && v2 === 0){return 1 / v1 === 1 / v2;}else if (v1 !== v1){return v2 !== v2;}else return v1 === v2;}object1is( NaN, NaN );//trueobject1is( NaN, 1 );//falseobject1is( -0, +0 );//falseobject1is( -0, -0 );//trueobject1is( 6, 5 );//falseconsole.log(parseInt( 1/-0, 19 ));//假值console.log(Boolean(''));console.log(Boolean(0));console.log(Boolean(null));console.log(Boolean(undefined));console.log(Boolean(false));console.log(Boolean(NaN));//Symbolvar mysymbol = Symbol('my own symbol');var a = {};a[mysymbol] = 'aaa';//数组可以容纳任何值var b = [1,function(){},2,function(){}];//关于强制类型转换//关于字符串和数字间的强制类型转换var arr1 = [1,2];var arr2 = [3,4];console.log( arr1 + arr2 );//"1,23,4"??//先需要根据ToPrimitive将值转换成基本数据类型(一般有两步)://1.调用valueOf(),如果存在该方法且返回一个基本数据类型a,就用a进行下一步运算操作//2.否则调用toString()的返回值//上述的arr通过valueOf返回的是原始对象值,不是基本数据类型。//所以调用toString方法,最后得到的事字符串拼接var a = {toString: function() {return 42;} ,valueOf: function() {return 4;}}console.log( a + '');//4 调用valueOfconsole.log( String( a ) );//42 调用toString//注意注意注意!!!!我们都知道'+'操作符会强制类型转换,//但是它的转换发生在运算符作用期间(即你进行+操作的时候),//在+操作之前,会通过ToPrimitive将操作数先转换成基本数据类型//胖剪头reduce实现通过隐式类型转换判断是否只有唯一真值var onlyCallBack = ( pre , cur ) => { return !!pre + !!cur === 1};var result1=[42,0,0,0,0,0].reduce( onlyCallBack, 0);console.log(result1);//for循环实现onlytruevar arr1 = [42,0,0,0,0,0,NaN];var onlyTrue = function (arr){let sum = 0;for (let i=0; i < arr.length; i++){sum += !!arr[i];}return sum === 1;}console.log( onlyTrue( arr1 ) );console.log(!!NaN);//Symbol基本数据类型var s1 = Symbol( 'aaa' );console.log( String( s1 ) );console.log( s1 + '' );//TypeErrorfunction isNegZero(n){    n = Number( n );    return (n === 0) && (1 / n === -Infinity);}isNegZero( -0 );//trueisNegZero( 0 );//falseconsole.log(Infinity === Infinity);Object.is( 0, -0 );Object.is( NaN, NaN );Object.is( -0, -0 );


原创粉丝点击