javascript对象和c++对象的区别-----坑爹的js,痛苦的语法特性,使用方法
来源:互联网 发布:树莓派ubuntu系统 ssh 编辑:程序博客网 时间:2024/06/06 06:54
Javascript是“基于对象”的语言,因为其函数就是对象,而不是面向对象的语言,因为他不支持多态等东西。作为一个从C++转换到js的程序员,对于js的各种作用域、类的声明方式等不安情理出牌,我感觉很不习惯,很痛苦!
1、坑爹一: var 的使用与否对作用域的影响:
加var的变量 就要看声明在哪个位置,如果没有在任何方法里面,就是全局的,如果在方法里面就只能是在方法里面全局
不加var的变量 就是整个window都有用,也就是页面全局, 可以用window.变量来调用
1.类型分析:
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;
alert(typeof a); //显示"undefined"
alert(typeof a1); //显示"undefined"
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined"
从上面的代码中可以看出未定义的值和定义未赋值的为undefined,null是一种特殊的object,NaN是一种特殊的number。
2.比较运算
var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;
alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"
从上面的代码可以得出结论:(1)undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。
1、坑爹一: var 的使用与否对作用域的影响:
加var的变量 就要看声明在哪个位置,如果没有在任何方法里面,就是全局的,如果在方法里面就只能是在方法里面全局
不加var的变量 就是整个window都有用,也就是页面全局, 可以用window.变量来调用
<script type="text/javascript">var a = "a";b = "b";function test(){document.write(a+"~~"+b+"</br>"); //undefined~~b,因为在此函数中,var声明了a变量,而该打印在赋值之前,故为undefineddocument.write(window.a+"~~"+window.b+"</br>");//a~~bvar a ="A";//这里如果不用var,结果完全不一样b = "B";//这里如果用var,结果也不一样document.write(a+"~~"+b+"</br>");//A~~Bdocument.write(window.a+"~~"+window.b+"</br>");//a~~B}test();document.write(a+"~~"+b+"</br>");//a~~Bdocument.write(window.a+"~~"+window.b+"</br>");//a~~B</script>
下面的案例:
var MyClass = function(a, b){//alert("construction name_var " + name_var); //这里name_var声明了,但是没有赋值//alert("construction name_local" + name_local); //而这里因为name_local因为没有声明,所以会产生引用错误,表明name_local没有定义。Reference error, is not defined//alert("construction name " + name); //注意,这里是name第一次在B对象调用时没有任何值?why?//在objC调用时为b_name,全局变量? undefined 表明申明了没有赋值,如果没有声明返回空?//name //注意,不能使用这个参数,这个参数是window.name,所以会存在第一次调用的时候输出空字符串,//而第二次调用objC的时候,因为已经编程全局对象了。所以会有输出结果值。//var name_var = a; //注意:这里是构造函数内的一个局部变量,并不是对象MyClass的属性。name_local = a; //注意,这里和name_var的区别,这里name是window的作用域的。 为什么显示Refference Error你说这坑爹不?namess = a; //这里和name_local的区别,name在getMyClass里面声明为var 局部变量。 这里name是全局变量 window.this.value = b; //而这里的value是属性,可以在对象外部访问,并且修改值。注意,属性必须要有this注明。this.getMyClass = function(ss, value){//alert("getMyClass name_var " + name_var); //这里可以访问name_varaaa();alert("getMyClass name " + namess);alert(name);alert(this.name);//alert("getMyClass name_local " + name_local);//name_var = "in getMyClass"; //这两个说明var是局部变量声明,可以提前到真个局部作用域范围内,能够屏蔽外部作用域中的变量//var name_var = "sdfsdf";name_local = "in getMyClass"; //var name = "这里产生干扰";namess = 'sdfsssssdf';}function aaa(){alert(aaa.name);alert(name);alert(window.name);alert(this.name);}getValue2 = function(name, value) //这个是局部函数使用了。{namess = "getValue2_name";value ="getValue2";}}var objB = new MyClass("b_name", "b_value");//aaa(); 这里是没有定义错误//objB.aaa();alert(name_local);alert(window.name_local);var objC = new MyClass("c_name", "c_value");alert(name_local);alert("objC getMyClass");objC.getMyClass();alert("objB getMyClass");objB.getMyClass();objB.name = "b_Propety"; //这里重新给类赋予了属性namealert(objB.name); objB.getMyClass();objB.getMyClass();//objB.getValue2(); //这里访问出错了哦。
总之:
1、var 声明变量,将变量的作用域提到整个局部区域内,比如函数内整个区域,并且alert放回undefined。能够屏蔽更大一级的作用域的的变量。
2、当变量没有声明时,会出现引用错误,返回not defined错误。
3、在函数对象构造函数内以下面这种方式
aaa = "bbbb";
声明的变量,具有全局作用域,其为window对象的属性,能够为所有对象共享,在函数外面能够访问。
4、name为每个函数的属性,表明这个函数的函数名,所以这个以后要注意这个关键字
所以输出函数名的时候,需要使用aaa.name, 而window也具有name属性。
5、以后声明变量需要用var 。
1.类型分析:
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;
alert(typeof a); //显示"undefined"
alert(typeof a1); //显示"undefined"
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined"
从上面的代码中可以看出未定义的值和定义未赋值的为undefined,null是一种特殊的object,NaN是一种特殊的number。
2.比较运算
var a1; //a1的值为undefined
var a2 = null;
var a3 = NaN;
alert(a1 == a2); //显示"true"
alert(a1 != a2); //显示"false"
alert(a1 == a3); //显示"false"
alert(a1 != a3); //显示"true"
alert(a2 == a3); //显示"false"
alert(a2 != a3); //显示"true"
alert(a3 == a3); //显示"false"
alert(a3 != a3); //显示"true"
从上面的代码可以得出结论:(1)undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。
- javascript对象和c++对象的区别-----坑爹的js,痛苦的语法特性,使用方法
- javascript对象和c++对象的区别-----坑爹的js,痛苦的语法特性,使用方法
- javascript--对象的特性
- json对象和js对象的区别
- js面向对象的基本概念和使用方法
- javascript的基本语法和对象
- JavaScript RegExp 对象的使用方法
- js 中对象的特性
- Dom对象,js对象和jquery对象的区别
- DOM对象和js对象以及jQuery对象的区别
- JavaScript创建对象的语法
- Javascript的面向对象语法
- prototype.js 深入学习 javascript 的面向对象特性
- 从 prototype.js 深入学习 javascript 的面向对象特性
- 从 prototype.js 深入学习 javascript 的面向对象特性
- js--语法--for和for-in;访问对象的属性.和[]的区别
- 被坑了,js语法跟Java面向对象语法还是有区别的
- javascript对象和函数的区别
- 2011年10月编程语言排行榜:Java人气持续走低
- 关于内存泄漏检测工具VLD(Visual Leak Detector)
- Lisp的本质(The Nature of Lisp) (转:http://www.lispchina.com/bbs/thread-252-1-1.html)
- C# 生成随即验证码图片类库
- 字符,字节和编码
- javascript对象和c++对象的区别-----坑爹的js,痛苦的语法特性,使用方法
- Hibernate Session
- SQL Server 2005 的启动过程
- Linux输入输出重定向
- POJ 1087 A Plug for UNIX (最大流,EK算法)
- hdu acm steps 2.2.1
- mfc-datetimepicker控件设定 字符串格式时间
- android sdk下载与安装
- erlang浅谈(3)-Erlang系统特点