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

   这些是我前段时间复习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 );//true
object1is( NaN, 1 );//false
object1is( -0, +0 );//false
object1is( -0, -0 );//true
object1is( 6, 5 );//false
console.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));
//Symbol
var 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 调用valueOf
console.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循环实现onlytrue
var 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 + '' );//TypeError

function isNegZero(n){
    n = Number( n );
    return (n === 0) && (1 / n === -Infinity);
}
isNegZero( -0 );//true
isNegZero( 0 );//false
console.log(Infinity === Infinity);
Object.is( 0, -0 );
Object.is( NaN, NaN );
Object.is( -0, -0 );


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值