ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JS视频知识点整理 【day02】

2021-09-17 19:00:08  阅读:109  来源: 互联网

标签:知识点 console log day02 JS str var obj 属性


1.类型转换

①转换成字符串的方式

//转换字符串的三种方式
//null和undefined没有tostring()方法
var num=1;
var str1=num.toString();
var str2=String(num);   //字符串类型的'1'
var s=1+'';
console.log(str1,str2,s);

②其他类型转化成字符串

var na=NaN;
var u=undefined;
var n=null;
var bool=true;
var arr=[1,2,3];
var obj={};
var str1=toString(na);        //'[object Undefined]'
//var str2=u.toString();      //报错
//var str3=n.toString();      //报错
var str2=String(u);           //'undefined'
var str3=String(n);           //'null'
var str4=bool.toString();     //'true'
var str5=arr.toString();      //'1,2,3'
var str6=obj.toString();      //'[object Object]'
console.log(str1,str2,str3,str4,str5,str6);

③其他类型转换成boolean

var res='1';
var r=Boolean(res);
console.log(r);  //true

④ 其他类型转换成数值类型

//数值转换数值
var str='1.0';
var n1=Number(str);      //1
var n2=parseInt(str);    //1
var n3=parseFloat(str);  //1
console.log(n1,n2,n3);
var str='1.01';
var n1=Number(str);      //1.01
var n2=parseInt(str);    //1
var n3=parseFloat(str);  //1.01
console.log(n1,n2,n3);
//空字符串转换数值
var str='';
var n1=Number(str);      //0
var n2=parseInt(str);    //NaN
var n3=parseFloat(str);  //NaN
console.log(n1,n2,n3);
//null转换数值
var str=null;
var n1=Number(str);      //0
var n2=parseInt(str);    //NaN
var n3=parseFloat(str);  //NaN
console.log(n1,n2,n3);
//带数值的字符串转换数值
var str='111hello';
var n1=Number(str);      //NaN
var n2=parseInt(str);    //111
var n3=parseFloat(str);  //111
console.log(n1,n2,n3);
//布尔类型转换数值
var str=true;
var n1=Number(str);      //1
var n2=parseInt(str);    //NaN
var n3=parseFloat(str);  //NaN
console.log(n1,n2,n3);
//undefined转换数值
var str=undefined;
var n1=Number(str);      //NaN
var n2=parseInt(str);    //NaN
var n3=parseFloat(str);  //NaN
console.log(n1,n2,n3);
//对象转换为数值
var str={};
var n1=Number(str);      //NaN
var n2=parseInt(str);    //NaN
var n3=parseFloat(str);  //NaN
console.log(n1,n2,n3);

2.流程控制语句

If-else

//三个数值,从大到小排序
var a=2, b=1,c=3;
var n1;
if(a<b){
    n1=a;
    a=b;
    b=n1;
}
if(a<c){
    n1=a;
    a=c;
    c=n1;
}
if(b<c){
    n1=b;
    b=c;
    c=n1;
}
console.log(a,b,c);   //3 2 1

switch

//判断某一天为工作日还是休息日
var day=1;//工作日
switch(day){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        console.log('工作日');
        break;
    case 6:   //default:
    case 7:
        console.log('休息日');
        break;
}

for

//从1加到100
var sum=0;
for(var i=1;i<=100;i++){
    sum +=i;
}
console.log(sum);  //5050

while

//从1加到100
var i=1;
var sum=0;
while(i<=100){
    sum+=i
    i++;
}
console.log(sum);

do-while

var i=1;
var sum=0;
do{
    sum+=i
    i++;
}while(i<=100);
console.log(sum);

break 和continue

在嵌套循环中,只对当前层有作用

标记

//希望b=5时结束全部循环,使用标记
a1:for(var a=1;a<=10;a++){
    for(var b=1;b<=10;b++){
        if(b==5)
            break a1;
        console.log(a,b);
    }
}

3.流程语句例子

//在当入职时,工资为10k,每年增幅5%,20年后工资为多少?
var n=10000;
for(var i=1;i<=20;i++){
    n+=n*0.05;
}
console.log(n);
//五角,1元,5元的纸币搓成20元,有多少种情况?
var n=0;
for(var i=0;i<=40;i++){
    for(var j=0;j<=20;j++){
        for(var k=0;k<=4;k++){
            if(i*0.5+j*1+5*k==20){
                n++;
            }
        }
    }
}
console.log(n);  //55

4.对象

①Js工作原理

        初期,设计初衷运行在浏览器端的脚本语言(dom)

        单线程的嵌入式脚本语言,执行代码线程只有一个(因为如果为多线程,会出现多个线程同时操作同一个dom的问题)也会出现问题:任务需要排队,如果某一个任务执行时间很长,会造成阻塞

          解决方式:采用异步方式

                  第一种:setTimeOut()  某一些功能需要等待一些时间才执行

                  第二种: Ajax  这个数据回来时间不确定

②Js垃圾回收机制

             主要解决:内存中出现一些不再需要的变量-----内存泄漏

             工作方式:会间隔的不定期的寻找不再使用的变量,并释放他们

            方法:标记清除,引用计数

            被视为垃圾的情况:①没有被引用的变量

                                            ②几个对象相互引用成为闭环

            不会被视为垃圾的情况:①全局变量-----时刻待命

                                                  ②有具体的引用关系---闭包(在函数的内部还有函数,内部的函数引用外部函数的变量)

        ③垃圾回收机制示例

 function test(){
    var num=0;
    console.log(++num);
}
//每次在函数的功能体中,每一次执行完毕后,不被引用的变量会被销毁
test();   //1
test();   //1
test();   //1

5.对象的创建

      ①字面量方式

var stu={
    name:'xiaoming',
    height:180,
    weight:60,
    money:'多',
    cook(){
        console.log(this.name+'去做饭')
    },
    housework(){
        console.log('去做家务')
    },
}

   ②构造函数方式

var stu2=new Object();
stu2.name="xiaohong";
stu2.height=160;
stu2.weight=45;
stu2.money='多';
stu2.sayHello=function(){
    console.log('hello');
}

6.访问属性和方法

//访问属性的方式
console.log(stu.name);
console.log(stu['name']);
//方法的调用
stu.cook();

//对象的遍历for...in  能被for..in打印的属性成为可枚举属性(默认情况下,自定义的属性都是可以被枚举的)
for(k in stu){   //k表示属性的键
    //console.log(k);// name height weight money cook housework
    console.log(stu[k]); //xiaoming 180 60 多 [Function: cook] [Function: housework]
}

删除某一个属性 只能删除自定义属性,无法删除继承属性

delete stu.money; 

新增属性  新增时,如果原对象中没有该属性,为新增,如果有,为修改

stu.money='少';

7.valueOf和toString

①这两个方法都为对象的原始方法

②valueOf为对象的原始值,通常不会显示的调用,通常由js自动在后台进行调用

③toString本身的一个作用是做字符串的转换,也会进行自动调用

④如果我们都重写了这两个方法,在进行运算时,优先调用valueOf,在进行显示时,优先调用toString,

⑤如果我们只重写了一个方法,那么无论是运算还是重写,都会调用重写的方法

⑥如果两个都重写,我们会优先调用valueOf

示例如下:

var obj={
    num:1,
    toString:function(){
        return this.num+1;
    },
    valueOf:function(){
        return this.num+2;
    },
}
console.log(obj==2);   //false 这时候调用valueOf

使用valueOf()实现一个累加的实例,每次调用obj时,valueOf()方法都会被调用

var obj={
    num:1,
    toString:function(){
        return this.num+100;
    },
    valueOf:function(){
        return this.num++;
    },
}
//因为num在valueOf中被引用,所以num不会被当作垃圾回收
console.log(obj==1);    //true
console.log(obj==2);   //true
console.log(obj==3)     //true

如果没有重写valueOf,那么转数值类型返回NaN,如果重写,优先调用valueOf

var obj={
    num:1,
    toString:function(){
        return this.num+100;
    },
    valueOf:function(){
        return this.num++;
    },
}
console.log(Number(obj));  //1

8.在对象中的检测属性和方法

//in 检测某个属性是否是某个对象的自由属性或继承属性
//hasOwnProperty(propertyName)  检测某个属性是否是某个对象的自有属性
//propertyIsEnumerable 检测某个属性是否是某个对象的自有属性,可枚举的属性
var obj={
    name:'xiaoming',
}
console.log('toString' in obj);  //true
console.log(obj.hasOwnProperty('toString'));  //false
console.log(obj.propertyIsEnumerable('toString')); //false

检测对象是否在同一个原型链中

检测对象是否是某个构造函数的实例

//in 检测某个属性是否是某个对象的自由属性或继承属性
//hasOwnProperty(propertyName)  检测某个属性是否是某个对象的自有属性
//propertyIsEnumerable 检测某个属性是否是某个对象的自有属性,可枚举的属性
var obj={
    name:'xiaoming',
}
//isPrototypeOf()检测一个对象是否在另一个对象的原型链上(原型的指向)
//instanceof()检测一个对象是否是某个构造函数的实例 new
var str=new String('zhangsan');
console.log(str instanceof String); //true
console.log(str instanceof Object);  //true
console.log(String.prototype.isPrototypeOf(str));  //true
console.log(Object.prototype.isPrototypeOf(str));  //true
function Animal(){};
var dog=new Animal();
console.log(dog instanceof Animal);  //true
console.log(dog instanceof Object);  //true
console.log(Animal.prototype.isPrototypeOf(dog));  //true
console.log(Object.prototype.isPrototypeOf(dog));  //true
var obj={};
console.log(Object.prototype.isPrototypeOf(obj));  //true
function Dog(){};
var dog2=new Dog();
console.log(Animal.prototype.isPrototypeOf(dog2));  //false

标签:知识点,console,log,day02,JS,str,var,obj,属性
来源: https://blog.csdn.net/Primary_Insist/article/details/120354658

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有