• javascript基本操作及原理学习


     /*
     临时对象测试
       js中临时对象在引用后就会被销毁
     */
    function onClick() {
    	 var s="hello world";
    	 var word=s.substring(s.indexOf(" ")+1,s.length);
    	 //alert(word);
    	 var s="test";
    	 s.len=4;
    	 console.log("s.len=:",s.len);//输出:undefined
    	 var t=s.len;
    	// alert(t);
    	var t=s.len=4;
    	console.log("s.len= ",t);//4
    	console.log("s.len= ",s.len);//undefined
    	
    	var s="test",b=1,c=true;
    	var S=new String(s);
    	var B=new Number(b);
    	var C=new Boolean(b);
    	console.log("s",S);//==时 s和S是相同的,而在===全等于时,二者就不相同,因为s是String类型,S为Object对象。
    	console.log("isTrue",s===S?true:false);//false
    	console.log("isTrue",s==S?true:false);//true
    	console.log("s",typeof(s));//String
    	console.log("s",typeof(S));//Object
    	//js中的原始值是无法被更改的,任何情况下都不行,如果调用其它方法,他会重新生成一个
    	//对象的值可以被更改
    	var h="hello";
    	console.log("toUpper",h.toUpperCase());//"HELLO"
    	console.log("h",h);//"hello"
    	var o={x:1};
    	console.log(typeof(o));
    	console.log("o.x",o.x);
    	o.x=2;
    	console.log("o.x",o.x);
    	o.y=3;//为对象o生成一个新的属性并赋值
    	console.log("o.x",o.x);
    	console.log("o.y",o.y);
    	var a=[1,2,3];
    	a[0]=0;
    	a[3]=4;
    	//对象为引用类型,任何情况下的将a赋给b,对象本身并没有复制一次,仅仅是赋值的引用值,个人理解:这种赋值二者的基地址是相同的,所以二者全等。
    	var a=[];
    	var b=a;
    	b[0]=1;
    	console.log(a[0]);
    	console.log("isTrue?",a===b?true:false);
    	
    	typechange();
    }
    function typechange() {
    	var s=10+"objects";//10转换成字符串
    	var sum="7"*"4";//两个均转化为数字;
    	var n=1-"x";//=>NaN ,字符"x"无法转换成数字
    	console.log(n);
    	n+="objects";//=>objects无法转换为数字
    	console.log(s,sum,n);
    }
     
    function onDown() {
    	/*
    	各种类型转换为字符串
    	toString()
    	*/
         var b=new Boolean(false);
         console.log("b",b);
         console.log([1,2,3].toString());//1,2,3
         console.log((function(x){f(x); }).toString());//function (x){f(x); }
         console.log(new Date(2017,0,1).toString());//Sun Jan 01 2017 00:00:00 GMT+0800 
         /*
         valueOf()
                   转换为实际的对象 不会返回原始值
         */
         var ob={x:1};
         console.log("ob=",ob.valueOf())//ob= [object Object]
         var d=new Date(2017,1,9);
         console.log("d==",d.valueOf());//1486569600000转换为1970年以来js的内部表示值 以毫秒表示日期
         var a=checkScope();
         console.log("checkScope:",a);
    }
    
         scope="glocal";
    
    function checkScope() {
    	//scope="local";
    	//myscope="local";
    	console.log("scope",scope);
    	//return [scope,myscope];
    }
    
    /*
      eval()具有改变全局变量的能力,
      但是定义别名调用它时,eval会把字符串当作顶层的全局变量来执行。
     就是说如果在函数中用别名来对一个全局变量进行eval操作时,执行的代码会定义新的全局变量和全局函数,或者
      给全局变量赋值,但却不能使用或者修改主调函数中的局部变量,因此不会影响到函数内的优化
     个人理解:利用别名来操作全局变量时,函数内返回全局变量不会改变,或者称为新的全局变量,而全局变量本身会
     把函数内对全局变量进行操作的方法当作顶层的全局变量来执行,所以函数内返回全局变量未更改,但是全局变量本身更改。
    */
       var  geval=eval;
       var x="global",y="global";
       function f() {
    	var x="local";
    	eval("x+='changed';");
    	return x;
    }
       function g() {
    	var y="local";
    	geval("y+='changed';");
    	return y;
    }
       console.log(f(),x);//localchanged global
       console.log(g(),y);//local globalchanged
    
    
    
    </script>
    
  • 相关阅读:
    父容器直接清除浮动的css
    [原创 js]指定DOM中添加字符串函数
    跨浏览器的透明度解决方案(包括IE8 Beta 2)
    [原创 js]验证表单强度的js
    帧率、码流与分辩率之间关系
    隔行扫描和逐行扫描(interlace and progressive )
    VGA管脚定义
    红眼消除
    HDMI_VGA_CBVS同时显示
    分辨率与行场同步信号的关系
  • 原文地址:https://www.cnblogs.com/smallbrokenchildwen/p/7158005.html
Copyright © 2020-2023  润新知