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 );
阅读全文
1 0
- JS值——学习小Demo之关于假值、绝对相等、强弱类型转换应用、symbol、-0
- js基础之关于Boolean及相等运算符的隐式类型转换
- JS小Demo实战之通过获取文本框的输入值来改变div的类型
- ES6学习之路~~Symbol:独一无二的值类型
- 【连载】实用小demo连载 3 —— js 时间转换 demo
- Android学习小Demo(20)关于Fragment的应用
- 值类型的相等比较
- double类型值相等判断
- javaScript学习(一)——js布尔类型转换
- 【js学习笔记-020】-- 转换和相等性
- iOS小demo之判断数值类型
- 同值相等算法 JS
- js之数据类型-隐式转换-类型检测 学习总结
- Javascript之 Symbol 类型
- JS学习笔记:类型转换
- 【JavaScript学习】JS类型转换
- 关于Long类型相等判断
- 自学JS基础之读写小DEMO
- Linux 命令执行控制
- 如何在Python中实现RFM分析
- EA&UML日拱一卒-多任务编程超入门-(4)发生了什么?
- 游戏优化方案
- 图的遍历 深度优先搜索 广度优先搜索
- JS值——学习小Demo之关于假值、绝对相等、强弱类型转换应用、symbol、-0
- qt生成pdf(用图片qgrabwidget抓取图片生成PDF;用文字生成pdf)
- 9元素宽高的获取
- 查看动态链接库依赖关系的命令
- hdu 2222 Keywords Search (AC自动机~)
- 201509-3 模板生成系统 ccf
- MySQL的调优参数
- Vim命令合集
- leetcode-21-Merge Two Sorted Lists