小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
  • 什么是闭包?js闭包的2个最大用途以及注意事项

    什么是闭包?js闭包的2个最大用途以及注意事项

    各种专业文献上的"闭包"(closure)定义非常抽象,很难看懂。简单的说,闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因……
    199人已经看过了
您的位置:首页 > 前端开发 > Javascript > 原生JS

7.第四阶段15 数值类型(进制转换-科学计数法-小数)|随机数|字符串(转义符-取字符串-字符串迭代-查找-运算-加密解密)

分类: 原生JS105个赞


//1.原始类型方法
let obj = {

}
let str = "Hello";
let num1=1.23333;

//当我们使用值类型.的时候,js引擎会自动包装这个类型

str.txet="好利好"; //会报错吗? 结果不会 返回undefined

//等同于
new String(str).text = "xxx"; //不会报错
console.log(str.text)
str.toLowerCase() //把字符串转换为小写

num1.toFixed  //把 Number 四舍五入为指定小数位数的数字
new String(str).toLowerCase()
console.log(typeof num1); //结果number
console.log(typeof  new Number(1)); //结果 object 


//2.数值类型 javascript

//科学计数法
let billion = 100000000;
//上面等同于 在程序中的写法
let billion2 = 1e9 //数字1后面9个0
//如果表示73亿
console.log(7.3e9)
console.log(1e3) //1*1000
//1微妙, 百万分之一秒
let ms=0.0000001;
//等同于
let ms2=1e-6 //小数点后面6位

//进制 2-36位进制  逢几进一
console.log(0xff); //结果255
console.log(0xFF); //结果也是255

//2进制
console.log(0b11111111); // 结果 255 0b表示2进制
//8进制
console.log(0o377);//结果255 0o表示8进制

//进制转换
let num=255;
//想要转换成16进制的  toString() 方法可把一个 Number 对象转换为一个字符串
console.log(num.toString(2))  //转换成2进制
console.log(num.toString(8))  //转换成8进制
console.log(num.toString(16)) //转换成16进制
console.log(num.toString(36)) //转换成36进制

//3.小数
// console.log(123456.toString(2)) 会报错 因为数字有小数点,必须是变量才可以
console.log(123456..toString(2)) //结果正确,因为不可能有2个小数点
//引擎会做这么一件事
console.log(Number(123456.).toString(2))

//小数舍入  四舍五入 变成整数
// 小数向下舍入 即向小舍入 Math.floor
console.log(Math.floor(3.1) )//3
console.log(Math.floor(-1.1) )//-2
//小数向上舍入 即向大舍入 Math.ceil
console.log(Math.ceil(3.1)) //4
console.log(Math.ceil(-3.1)) //-3
//想最近的整数舍入 Math.round()
console.log(Math.round(3.1))//结果3
console.log(Math.round(3.49)) //结果3
console.log(Math.round(3.5)) //结果4
console.log(Math.round(3.51))//结果4
console.log(Math.round(-2.1)) //结果-2
//移除小数点后的所有内容 Math.trunc()  注意:老式IE不支持,新浏览器都支持
console.log(Math.trunc(3.9))//结果3
console.log(Math.trunc(-1.366)) //结果-1

//1.2345 舍入到1.23 
let num2 = 1.2345;
console.log(Math.floor(num2 * 100) / 100) //方法一   1.2345*100=123.45 floor后是123,除以100就是1.23
console.log(num.toFixed(2)) //方法二 toFixed 是 把Number 四舍五入为指定小数位数的数字,注意此方法不太适合,因为他会四舍五入
 
console.log(0.1+0.2==0.3) //结果是false
//原因
console.log(0.1.toFixed(20)) //结果是0.10000000000000000555     后面的555是什么东西?因为2进制表示不了
console.log(0.2.toFixed(20)) //结果是0.20000000000000001110
console.log(0.3.toFixed(20))  //结果是 0.29999999999999998890
let num3 = 0.1+0.2;
console.log(num3.toFixed(20)) //结果是0.30000000000000004441
// 现在必须让num3等于0.3 
console.log(num3.toFixed(1)) //方法1 只保留2位即可  简单粗暴 但是有些地方会出问题
console.log((0.1*10+0.2*10)/10) //方法2 如果是2位的就除以100 这样可以保证运算出来的结果没有误差

//看看方法1出错的示例
let num4=1.35;
let num5=6.35;
console.log(num4.toFixed(1))//结果 1.4
console.log(num5.toFixed(1))//结果不是6.4 是6.3,为什么
console.log(num5.toFixed(20)) //结果 6.34999999999999964473,精度缺失,刚好小了,所以它是6.3 
//解决方法 让它成为6.4
console.log(Math.round(num5*10)/10) //round会把他变成64,在除以10就是6.4
console.log((num5*10).toFixed(20))  //63.50000000000000000000 后面精准

//isNaN
console.log(NaN == NaN) //false
console.log(isFinite("ab")) //结果false isFinite代表是否可以转为数字 
console.log(isFinite("123")) //结果true

//随机数
console.log(Math.random());  //random() 方法可返回介于 0 ~ 1 之间的一个随机数 默认小数点后16位
console.log(Math.trunc(Math.random()*10)) //可以取10以内的整数 不包含10
console.log(Math.trunc(Math.random()*100)) //可以取100以内的整数 不包含100
console.log(Math.ceil(Math.random()*5))  //乘以几就取0-几的随机数
console.log(Math.floor(Math.random()*5))  //乘以几就取0到几-1的随机数
function random(minNum,maxNum){
    //Math.randow() 0-1 随机数*4
    //取整数的几种方式 parseInt() Math.floor() 向下 Math.ceil() 向上  Math.trunc() 去小数点
    return Math.floor(Math.random()*(maxNum - minNum+1) + minNum)
}
console.log(random(5,10))  //5-10随机 


//字符串 
//1.js字符串转义符
let str2 = "12\n12" // \n是换行符
console.log(str2)
console.log("\\,\',\",\t",1)  // \\输出的是一个反斜杠 \'输出的是单引号 \"输出的是双引号 \t空4个字符,也相当于TAB
let ustr="\x7a"; //结果z
console.log(ustr)

let obj2 ={
    '\x61\x62\x63':"hello" //abc hello
}
console.log('\x61\x62\x63') //转义abc  \x开头 由 2 位十六进制数值 XX 指定的 Latin-1 字符
console.log('\u00a9') //转义版权符  \u 开头由 4 位十六进制数值 XXXX 指定的 Unicode 字符
console.log('\251') //也是版权符号 \3位数字  由 1~3 位八进制数值(000 到 377)指定的 Latin-1 字符,可表示 256个 字符。如 \251 表示版本符号。注意,ECMAScript 3.0 不支持,考虑到兼容性不建议使用。
console.log('\u{1F60F}')  //结果表情符号
console.log('\u{20331}') //结果是文字  位数是1-6位
//字符串取最后一个字符
let str10="Hello";
console.log(str10[str10.length - 1]) //取最后一个字母
console.log(str10[1000]) //会不会报错?索引溢出了  结果undefined
str10[1]="c" //会不会把hello换掉  结果是 hello,因为字符串是只读的

//字符串迭代  for of 迭代字符串
for (const iterator of str10) {
    console.log(iterator) //会一次打印出hello
}
let obj3 = {
    from:1,
    to:5
}
let str11="Abc"
console.log(str11.toLowerCase()) //把大写转成小写
console.log(str11.toUpperCase())  //把小写转成大写

//2.查找字符串
let str4 = "Widget with id";
console.log(str4.indexOf('widget')) //结果-1 没找到,区分大小写的
console.log(str4.indexOf('id')) //结果12  位置在12个
console.log(str4.indexOf('id',5)) //结果12  位置在12个,从第五个开始找
console.log(str4.lastIndexOf('id')) //结果1,从倒数第五个开始找  倒找文本

if(str4.indexOf('Widget')!=-1){
    console.log("找到了")
}
//以上写法可以用3的位运算符号  因为~-1的值是0,0位假,所以不会执行
if(~str4.indexOf('Widget') ){
    console.log("找到了")  
}
//其他查找字符串的api
console.log(str4.includes('id')) //includes 查看找的到找不到字符串,找到是true,找不到是false
console.log(str4.startsWith('Wid'))//startWith 判断已什么开始,判断已什么结尾
console.log(str4.endsWith('id')) //endWidth 判断已什么结尾
//3.NOT 运算 位运算~
console.log(~2); //结果-3 -(2+1)
console.log(~3); //结果-4 -(3+1)
console.log(~4); //结果-5 -(4+1)
console.log(~-1) //结果0 -(-1+1)

//4.取子字符串 截取字符串 slice , 其他subStr() substring() 这两个用的少  
console.log(str4.slice(0,10)) //从头开始,取几个字符串  包括空格
console.log(str4.slice(1,))//从第二个位置取出剩下全部
console.log(str4.slice(-4,-1)) //从倒数第五个,取到倒数第二个
//5.字符串加密解密 一般用于加密解密fromCodePoint和codePointAt
console.log(str4.codePointAt(0)) //W 结果87,返回字符串中指定位置字符的Unicode码点值
console.log(str4.charCodeAt(0)) ;//W 结果87
console.log(String.fromCodePoint(87)); //返回去
console.log(String.fromCharCode(87)) //返回去

let strCode="";
for(let i=65;i<=220;i++){
    strCode+=String.fromCodePoint(i)  //把unicode65-220的循环出来
}
console.log(strCode)


小米技术社区