进制转换
1,进制转换
console.log(0b10);//2
console.log(0O10);//8
console.log(0x10);//16
2,判断是否是进制转换类型相同
console.log(0b11===3);//true
console.log(0o10===8);//true
cossole.log(0x10===16);//true
3,将数字转换成2进制8进制以及16进制
let num = 10;
console.log(num.toString(2));//2进制转换
console.log(num.toString(8));//8进制转换
console.log(num.toString(16));//16禁止转换
字符串以及解析
字符串以及字符串模板
//字符串与字符串模板
let name = "xwj"
let mystr1 = "你好,${name}!"//标准的字符串
let mystr2 = `你好,${name}!再见。`//反引号的字符串模板
console.log(mystr1);//你好,${name}!
console.log(mystr2);//你好,xwj!再见。
字符串模板(带有反义号)可以把值带进去
把字符串里面的值取出来,使用字符串模板解析
/解析模板
const age = 16
function tagged (formats,...args){
console.log(formats);//[ '你好 ', '!再见。' ]
console.log(args);//[ 16 ]
}
tagged`你好 ${age}!再见。`
模板的延长
//脚本模板活用的方式
let name = "xwj";
let address = "网吧";
let str = `你好,${name}啊! 今天去${address}玩吧`;
console.log(str);
function markdown(formats,...args){//以markdown的形式
console.log(formats);
console.log(args);
var result = "#信息标题\n";
for(var i = 0;i< formats.length;i++){
result += formats[i]+"**"+(args[i] || '')+"**";//使字体进行加粗
return result;
}
}
//对获取的args进行加粗
Symbol
//Symbol类型 属于原始类型 Symbol内部分配了一个哈希值 使用哈希值进行比较
//传统字符串
let str3 = "HelloWord";
let str4 = "HelloWord";
console.log(str3 == str4);//true 说明值相等
console.log(str3 === str4);//true 说明都是字符串类型
//ES6新增的Symbol类型
let str1 = Symbol("HelloWord");
let str2 = Symbol("HelloWord");
console.log(str1 == str2);//false 值不相等
console.log(str1 === str2);//false 类型不相等
console.log(typeof(str1));//symbol
//原因:Symbol属于原始类型 会给内存分配一个地址 根据地址会进行计算一个哈希值 对哈希值进行比较所以类型不一样
// 进行比较内部的id
Symbol应用
1,作为常量
//作用:
//1,作为常量
const java = Symbol();//symbol可作为一个常量
const php = Symbol();
var lang = java;
if (lang === php){
console.log('php的未来');
}
else if(lang === java){
console.log('java的未来');
}
2,作为属性
//作用:
//2,作为属性
var s1 = Symbol("id1");
var s2 = Symbol("id2");
var obj ={ };//对象
obj[s1] = "helllo";
obj[s2] = "world";
console.log(obj);//{ [Symbol(id1)]: 'helllo', [Symbol(id2)]: 'world' }
console.log(obj[s1]);//helllo
console.log(obj[s2]);//world
3,作为半隐藏属性
//3,作为半隐藏属性
const MYKEY = Symbol();
class User {
constructor(key,name,age){//构造器进行传值
this [MYKEY] = key;//没有加点的为半隐藏属性
this.name = name;
this.age = age;
}
checkKEY(key){
return this[MYKEY]===key;
}//此函数用于判断传进来的key的值是不是构造器里面传进来的值
}
let user = new User(123,'Curry',29);
console.log(user.name,user.age,user[MYKEY]);//Curry 29 123
console.log(user.checkKEY(123));//用于判断MYKEY里面的值是不是123 true
console.log(user.checkKEY(456));//用于判断MYKEY里面的值是不是123 false
console.log(Object.keys(user));//利用object.keys例出user里面的所有属性里面的key值被隐藏了 [ 'name', 'age' ]
console.log(JSON.stringify(user));//字符串打印 {"name":"Curry","age":29}
解构赋值
解构赋值的写法
//数组赋值
let [a,b,c] = [10,20,30]
console.log(a,b,c);//10 20 30
let [x,y,...other] =[1,2,3,4,5]
console.log(x,y,other);//1 2 [ 3, 4, 5 ]
//对象赋值
//使用的方法:用于函数传参
let { name, age } = {name : 'xwq',age : 26 };
console.log(name,age); //xwq 26
//函数赋值
function fun1(){
return [10,20]
}
let [ num1 ,num2 ] = fun1();
console.log(num1,num2);//10 20
//函数参数名指定
function fun2(x=1,y=2){
return x+y;
}
console.log(fun2({ }));//3
console.log(fun2({x:10}));//12
console.log(fun2({x:10,y:20}));//30
可迭代对象
//可迭代的对象(能够进行循环)
//使用的知识点:可迭代对象+Symbol.iterator
//使用for let of建立可迭代对象
//进行定义
class Player{//定义一个类
constructor(list){//构造器接受一个数组
this.list = list;//把数组里面的值传给list
}
[Symbol.iterator](){//固定的迭代器写法
let current = 0;//首先定义一个当前的索引
let that = this;//把整个对象的this赋值给that
return{//return一个函数
next(){//相当于接口里面的方法 用于每一次的迭代都需要使用done进行判断
return current < that.list.length? {vaule : that.list[current++],done:false}:{done:true};
}
}
}
}
//使用方法:
let player = new Player (['xwq','xwj','wqr']);
for(let tmp of player){//这里的for let of属于可迭代对象 让tmp输出都是player里面任何一个值
console.log('name',tmp);
}
可迭代生长器的应用
//简单迭代生成器
//function *{} 迭代生成器
// yield 迭代生成器的返回
// rerurn 与 yield 的区别:return 返回一个固定的值 yield每调用一次函数 返回不同的值
function *MYDOOG(){
yield '好';
yield '美';
yield '丽';
}
for (let val of MYDOOG()){
console.log(val);
}
//好
//美
//丽
function *countdown(begin){//依次递减
while(begin>0){
yield begin--;
}
}
for(let npm of countdown(5)){
console.log(npm);
}
//5
//4
//3
//2
//1
坚持!你就是最好的!