javascript高级程序设计
来源:互联网 发布:java聊天室开源代码 编辑:程序博客网 时间:2024/06/06 14:42
第一章
1.注意标签中的
function sayScript(){ alert('<\/script>');// 如果這樣寫會報錯“alert('</script>')”}
第三章
3.12 标识符
所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符可以是按照下列格式规则组合起来的一个或多个字符:
(1)每一个字符必须是字母、下划线(_)或者一个美元符号($);
(2)其他字符可以是字母、下划线、美元符号或数字。
标识符中的字母也可以包含扩展的ASCII或Unicode字母字符(如さ和し),但我们不推荐这样做。
ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个有意义的单词的首字母大写,
eg: firsetSecond、myCar、doSomethingImportant
3.4 数据类型
基本数据类型:Undefined、Null、Boolean、Number和String
3.4.3 null 类型
alert(null == undefined); //true
3.4.4Boolean类型
3.45 Number类型
1.浮点数数值
var floatNum = 3.125e7//等于31250000var floatNum = 3e-7//等于0.0000003浮点数的计算要注意:0.1+0.2的结果不是0.3所以不要做这样的测试if(a + b == 0.3){ alert(You got 0.3);}
2.数值范围
最小值:Number.MIN_VALUE(在大多数浏览器中,这个值是5e-324)
最大值:Number.MAX_VALUE(在大多数浏览器中,这个值是1.7976931348623157e+308)
如果某次计算的结果超过这个最大值,或者低于这个最小值,那么这个值是正数,则会转正Infinity(正无穷),如果这个值是负数,则会转正-Infinity(负无穷)
如果想确定这个值是不是有穷的,则可以使用isFinite()函数。这个函数在参数位于最小与最大值之前时会返回true,如下面的例子:
var result = Number.MAX_VALUE+ Number.MAX_VALUE; alert(isFinite(result)); //false
特殊:访问Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY也可以得到负和正的Infinity的值。可以想见,这两个属性中分别保存着-Infinity和Infinity。
4.数值转换
有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。
Number()函数的转换规则如下。
∏如果是Boolean值,true和false将分别被转换为1和0。
∏如果是数字值,只是简单的传入和返回。
∏如果是null值,返回0。
∏如果是undefined,返回NaN。
∏如果是字符串,遵循下列规则:
∏如果是字符串,遵循下列规则:
▆如果字符串中数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”会变成1,“123”会变成123,而“011”会变成11(注意:前导的零被忽略了);
▆如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样,也会忽略前导零);
▆如果字符串中包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值;
▆如果字符串是空的(不包含任何字符),则将其转换为0;
▆如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
∏如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。
eg: var num1 = Number("Hello world!"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1
parseInt():在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()会返回NaN;也就是说,parseInt()转换空字符串会返回NaN,而用Number()对空字符串返回0.如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有的字符或者遇到了一个非数字字符。例如,”1234blue”会被转换为1234,因为“blue”会被完全忽略,类似的,“22.5”会被转换为22,因为小数点并不是有效的数字字符。
如果字符串中的第一个字符是数字字符,parseInt()也能识别各种整数格式(即十进制、八进制和十六进制数)。也就是说,如果字符串以“0x”开头且后面跟数字字符,就会将其作一个十六进制数;如果字符串以“0”开头且后面跟数字字符,则会将其当作一个八进制数来解析。
eg: var num1 = parseInt("1234blue"); //1234 var num2 = parseInt(""); //NaN var num3 = parseInt("0xA"); //10(十六进制数) var num4 = parseInt(22.5); //22 var num5 = parseInt("070"); //56(八进制数)最好不要用这个,因为在ECMAScript3中认为是56(八进制),而在ECMAScript5中认为是0(十进制) var num7 = parseInt("0xf"); //15(十六进制数)
为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。如果知道要解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数,可以保证得到正确的结果,
eg: var num = parseInt("0xAF", 16); //175 实际上,如果指定了16作为第二个参数,字符串可以不加前面的“0x”,如下例子: var num1 = parseInt("AF", 16); //175 var num2 = parseInt("AF"); //NaN 指定基数会影响到转换的输出结果。 eg: var num1 = parseInt("10", 2); //2(按二进制解析) var num2 = parseInt("10", 8); //8(按八进制解析) var num3 = parseInt("10", 10); //10(按十进制解析) var num4 = parseInt("10", 16); //16(按十六进制解析)
parseFloat()与parseInt()函数类似,parseFloat()也是从第一个字符(位置为0)开始解析每个字符。而且也是一走解析到字符串尾,或者解析到遇到一个无效的浮点数数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。举例来说,“22.34.5”将会转换为22.34。除了第一个小数点有效外,parseFloat()与parseInt()的第二个区别在于它始终都会忽略前导零。parseFloat()可以识别前面讨论过的所有浮点数格式,也包括十进制整数格式。但十六进制格式的字符串则始终会转换成0。由于parseFloat()只解析十进制值,因为它没有用到第二个参数指定基数的用法。最后一点要注意:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零),parseFloat()会返回整数。以下是使用parseFloat()转换数值的几个典型示例。
eg: var num1 = parseFloat("1234blue"); //1234(整数) var num2 = parseFloat("0xA"); //0 var num3 = parseFloat("22.5"); //22.5 var num4 = parseFloat("22.34.5"); //22.34 var num5 = parseFloat("0908.5"); //908.5 var num6 = parseFloat("3.125e7"); //31250000
3.46 String类型
String类型用于由零或多个16位Unicode字符组成的字符序列,即字符串。
3.转换为字符串
eg: var age = 11; var ageAsString = age.toString(); //字符串“11” var found = true; var foundAsString = found.toString(); //字符串“true”
数值、布尔值、对象和字符串值都有toString()方法,但是null和undefined值没有这个方法。
eg: var num = 10; alert(num.toString()); //“10” alert(num.toString(2)); //“1010” alert(num.toString(8)); //“12” alert(num.toString(10)); //“10” alert(num.toString(16)); //“a”
在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String(),这个函数能将任何类型的值转换为字符串。String()函数遵循下列转换原则:∏如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;∏如果值是null,则返回“null”;∏如果值是undefined,则返回“undefined”
eg: var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); //“10” alert(String(value2)); //“true” alert(String(value3)); //“null” alert(String(value4)); //“undefined”
3.5.1一元操作符
eg: var num1 = 2; var num2 = 20; var num3 = num1-- + num2; //等于22 var num4 = num1 + num2; //等于21
eg: var s1 = "2"; var s2 = "z"; var b = false; var f = 1.1; var o = { valueOf:function(){ return -1; } }; s1++; //值变成数值3 s2++; //值变成NaN b++; //值变成数值1 f--; //值变成0.10000000000000009(由于浮点传入错误所致) o--; //值变成数值-2
for对应while
for(;;){//无限循环 doSomething();}//只给出控制表达式实际上就把for循环转换成了while循环var count = 10;var i = 0;for(; i<count; ){ alert(i); i++;}
正则表达式
var mathces = pattern2.exec(text);console.log("matches.index:" + matches.index);console.log("matches[0]:" + matches[0]);console.log("patter2.lastIndex:" + pattern2.lastIndex);
var person = {};Object.defineProperty(person, "name", { writable: false, value: "Nicholas"});alert("person.name:" + person.name);person.name = "Greg";alert(person.name);//输出结果为://"Nicholas"//"Nicholas"
判断函数对象是否处于原型中
function Person(){}Person.prototype.name = "Nicholas";Person.prototype.age = 29;Person.prototype.job = "Software Engineer";Person.prototype.sayName = function(){ alert(this.name);}var person1 = new Person();var person2 = new Person();person1.name = "Greg";alert(hasPrototypeProperty(person1, "name"));//falsealert(hasPrototypeProperty(person2, "name"));//truefunction hasPrototypeProperty(object, name){ return !object.hasOwnProperty(name) && (name in object);}
不使用for in遍历函数对象
function Person(){}Person.prototype.name = "Nicholas";Person.prototype.age = 29;Person.prototype.job = "Software Engineer";Person.prototype.sayName = function(){ alert(this.name);}var keys = Object.keys(Person.prototype);alert("keys:" + keys);//"keys:name,age,job,sayName"var p1 = new Person();p1.name = "Rob";p1.age = 31;var p1keys = Object.keys(p1);alert(p1keys);//"name,age"
var book = { _year: 2004, edition: 1};Object.defineProperty(book, "year", { get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } }});book.year = 2005;alert(book.edition);//输出结果 2
===============================================================
var book = {};Object.defineProperties(book, { _year: { value: 2004 }, edition: { value: 1 }, year: { get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } }});var descriptor = Object.getOwnPropertyDescriptor(book, "_year");alert(descriptor.value);//2004alert(descriptor.configurable);//falsealert(typeof descriptor.get);//"undefined"alert(descriptor.value);//2004alert(descriptor.enumerable);//falsealert(typeof descriptor.get);"undefined"
==============================================================
function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; return o;}var person1 = createPerson("Nicholas", 29, "Software Engineer");var person2 = createPerson("Greg", 27, "Doctor");console.log("person1:" + JSON.stringify(person1));//person1:{"name":"Nicholas","age":29,"job":"Software Engineer"}console.log("person2:" + JSON.stringify(person2));//person2:{"name":"Greg","age":27,"job":"Doctor"}
==============================================================
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }}var person1 = new Person("Nicholas", 29, "Software Engineer");var person2 = new Person("Greg", 27, "Doctor");alert(person1.constructor == Person);//truealert(person2.constructor == Person);//true
==============================================================
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }}var person1 = new Person("Nicholas", 29, "Software Engineer");var person2 = new Person("Greg", 27, "Doctor");alert(person1 instanceof Object);//truealert(person1 instanceof Person);//truealert(person2 instanceof Object);//truealert(person2 instanceof Person);//true
==============================================================
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }}var person = new Person("Nicholas", 29, "Software Engineer"); person.sayName();//NicholasPerson("Greg", 27, "Doctor");window.sayName();//Gregvar o = new Object(); Person.call(o, "Kristen", 25, "Nurse"); o.sayName();//Kristen
==============================================================
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }}var person1 = new Person("Nicholas", 29, "Software Engineer");var person2 = new Person("Greg", 27, "Doctor");alert(person1 == person2);//false==============================================================
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = new Function(alert(this.name));}function sayName(){ alert(this.name);}var person1 = new Person("Nicholas", 29, "Software Engineer");var person2 = new Person("Greg", 27, "Doctor");alert(person1.sayName == person2.sayName);//true
- 读:JavaScript 高级程序设计
- 阅读“JavaScript高级程序设计”
- JavaScript高级程序设计
- JavaScript 高级程序设计
- dom javascript高级程序设计
- javascript 高级程序设计
- JavaScript高级程序设计
- JavaScript高级程序设计
- JavaScript高级程序设计
- javascript高级程序设计
- 《JavaScript高级程序设计》笔记
- 《javascript 高级程序设计》笔记
- Javascript高级程序设计
- javascript高级程序设计-----------------读书笔记
- JavaScript 高级程序设计 读书笔记
- 《javascript高级程序设计》读书笔记
- javascript之高级程序设计
- 《JavaScript高级程序设计》读书笔记
- iOS AFNetworking 框架导入报错解决方法
- Invalid byte 1 of 1-byte UTF-8 sequence.解决办法
- 去掉UIWebView顶部20点的空白条
- 内排序
- iOS使用支付宝支付步骤
- javascript高级程序设计
- 关于ADO.NET的一些理解
- win8.1下安装Oracle10g
- MySQL LIMIT
- linkbutton控件中使用CommandName属性和CommandArgument属性
- JList 双击事件
- 设计模式——简单工厂模式
- 利用UILabel、UITextView加载html文本
- iOS tableView的偏门问题