重捡前端1

2021-04-07  本文已影响0人  const_express
   
   let obj={
       name:'adiao',
       0:1111,
       [Symbol()]:2000
       
   }
   console.log(obj.name)
   console.log(obj)
   console.log(obj instanceof Object)
   console.log(obj[Symbol()]) // 这样是取不到上面symbol值的,因为上面是创建了一个唯一值,下面这种调用的也是创建了一个唯一值
   console.log('----------------')
   /*想取得symbol值,可以这样做:*/
   let sym =Symbol('A')
   let obj1={
       [sym]:3333,
       [Symbol()]:100000
   }
   console.log(obj1[sym])
   console.log(Object.getOwnPropertySymbols(obj1))
   let a ='657838399228889883737383838'
   let b ='75758595404030303'
   let c =Number(a)+Number(b)
   console.log(BigInt(c))
//    console.log(Number(BigInt(c)))
//    console.log(c)
console.log((typeof typeof []))  /**是字符串‘string’ 因为typeof不管后面跟啥都是字符串,所以 相当于 typeof 字符串,结
果肯定就是 ‘string’**/  
// 只要看到两个typeof 输出的结果一定是‘string’
/*实现call的对象是函数(包括箭头函数,生成器函数,构造函数) 所以:*/
// typeof 实现call的对象 结果都是  ‘function’
// typeof 其他的对象,结果是‘object’
console.log('------------------------------------------')
let obj3={
    name:'好美丽是土狗'
}
console.log(obj3-10)
let d =Number(20)
console.log(d instanceof Object)
console.log(d instanceof Number)
console.log(typeof d)
console.log('-----============')
var obj4 ={
    wky:1,
    [Symbol.toPrimitive](){   
        console.log(obj4.wky);
        return obj4.wky++
    }
}
// obj4.valueOf(3)
// console.log(obj4+20)
// console.log(obj4)
// let a1 =true


if(obj4==1&&obj4==2&&obj4==3){
    console.log('ok')
}else{
    console.log('nonono')
}



// Object.is()
/*null 和 undefined 在== 的情况下是true   在=== 的情况下是false    null  和undefined 和其他任何类型都不相等 都是
false*/
/* 当对象==字符串的是后 是把对象转换成字符串  其他情况都是转成数字,比如Boolean和string转换,就是转换成数字*/
console.log('=======FNGEXIAN======')
let e =[1,2,3]
e.valueOf=e.shift
if(e==1&&e==2&&e==3){
    console.log('okkkkkk')
}else{
    console.log('出错了')
}

console.log('数据类型转换分割线')
Number('12px')
console.log(Number('12px')) //          NaN 
console.log(Number('0x00002'))// 2
//Number()在遇到十六进制 十八进制字符串的时候可以转换成数字之外,其他字符串都是NaN

console.log('-----parseInt分界线----')
let arr1 = [12,12.0,'23.4px','0098',123]
arr1=arr1.map(parseInt)
console.log(arr1)
/*相当于 map里面传的函数--> arr1.map(function(item,index)),因为里面是parseInt函数,也就是---->
parseInt(item(当前项,字符串,如果不是字符串,就转成字符串),redix(进制,写0是10,不写默认是10,写2-36之间,是几进制转10进制))
比如: 101-->   2进制 转10进制 :
个位数1*(当前进制)2^0(末尾数位置,个位数是0,小数点后面第一位是-1,以此类推) --> 1+ 
十位数0*(当前进制)2^1(十位数的位值) 0+
百位数1*(当前进制)2^2(百位数的位置)4
=5

-------所以----
[12,12.0,'23.4px','0098',123]-->
parseInt(12,0) --> 12
parseInt(12.0,1) -->因为取值是2-36,不能为1 ,所以是NaN
parseInt('23.4px',2) --> NaN
parseInt('0098',3)  -->00 转成10进制-->0
parseInt(123,4)-->123,4进制转10进制--> 3*4^0+2*4^1+1*4^2=1+8+16=27

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 做对啦~~~~


*/
console.log('--其他数据类型转换成布尔--')
/*
只有0/NaN/null/undefined/空字符串 转化成 false ,其他都是true
转换布尔值常用的:
if()<-- 括号里的值是true
!取反
!!取反再取反

*/
console.log('--+号和数学运算与字符串拼接')
/*
字符串拼接的情况:
    两边都有值,有一边是字符串或者对象,此时为字符串拼接
    有一种情况:
    数字+{}  比如 10+{} -->结果是"10[object Object]",因为此时本来想把{}变为数字(一边有加号的情况一般都是数学运算),对象变成数字
    要先调用symbol.toprimitive 没找到,再去调用valueOf 还是没有,最后调用toStrig ,变成了字符串(对象变成字符串是'[object Object]')
    此时相当于数字10+字符串  变成了字符串拼接,所以结果就是  "10[object Object]"
    特殊情况:

    {}+数字 比如:{}+10 -->结果是10,因为空对象在ES6中被看作是块级上下文,参与运算的是+10,所以结果是10.除非({}+10),这样是"[object Object]10" 
字符串拼接

数学运算的情况:
    +号之后一边,或者x++  或者++x 这样是数学运算
    比如:var x =10
    10+(++x),先运算括号里面的10+1=11,再一起运算10+11=21
        10+(x++),运算10+10=20,括号里的x变成了11



        ****任何数+NaN的结果都是NaN
 


*/






上一篇下一篇

猜你喜欢

热点阅读