js高级一

一:script

1.带有 src 属性的<script>元素不应该在其<script>和</script>标签之间再 包含额外的 JavaScript代码。如果包含了嵌入的代码,则只会下载并执行外部脚本文件,嵌入的代码 会被忽略。 

2.defer 表示脚本延迟到文档完全被解析和显示后再执行,只对外部脚本文件有效。IE7及更早版本对嵌入脚本也支持这个属性。 

3.async 表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本。只对外部脚本文件有效。  

在加载多个JS脚本的时候,async是无顺序的加载,而defer是有顺序的加载。 

 

二:数据类型

1.标识符:就是指变量 函数 属性的名字或者函数的参数 可以按照下列的格式规则组合起来的一个或多个字符 

① 第一个字符必须是字母 下划线(_)或者美元符号$

②其他字符可以使字母 下划线 美元符号或数字

 

2.关键字:用户表示控制语句的开始或结束 或用户这行特定的操作等,关键字不能用作标识符

 

3.数据类型:Undefined Null  Boolean Number String Object  六类,

typeof() 检测数据类型返回下列字符串

'undefined'  如果这个值未定义
'boolean'  如果这个值是布尔值
'string'  如果这个值是字符串
'number'  如果这个值是数值
'object'  如果这个值是对象或null
'function'  如果这个值是函数

①undefined和null

都是只有一个值的数据类型 Undefined类型只有一个值 即特殊的undefined  NULL类型只有一个值的数据类型 这个特殊的值是NULL

在使用var声明变量但未对其加以初始化时 这个变量的值就是undefined 
对于尚未声明的变量 只能执行一项操作 即使用typeof操作符检测其数据类型返回的是undefined

var message
// var age
 
alert(message); //弹窗'undefined'
// alert(age); //产生错误

alert(typeof message); //弹窗'undefined'
alert(typeof age); //弹窗'undefined'
从逻辑角度看NULL值表示一个空对象指针,这也正是使用typeof操作符检测null时值会返回"object"的原因
var message = null;
alert( typeof message); //弹窗'object' 


如果定义的变量准备在将来用于保存对象 那么最好将该变量初始化为null 而不是其他值 这样一来只要检测null值就可以知道相应的变量是否已经保存了一个对象的引用 
if( message != null){
    //对message对象执行某些操作
}

实际上 undefined的值是派生自null值得  
alert( null ==undefined);//true

 

②Boolean 该类型只有两个字面值: true和false 区分大小写 True和False都不是布尔值只是标识符

要将一个值转换为其对应的boolean 可以调用Boolean()
var message = "Hello world!";
var messageAsBoolean = Boolean(message

可以对任何数据类型的值调用 Boolean()函数,而且总会返回一个 Boolean 值。至于返回的 这个值是 true 还是 false,取决于要转换值的数据类型及其实际值。下表给出了各种数据类型及其对 应的转换规则。 
数据类型                         转换为true的值                                    转换为false的值                            
Boolean true false
string 任何非空字符串 ''(空字符串)
Number 任何非零数字值 0和NaN
Object 任何对象 null
undefined   undefined








这些转换规则对理解流控制语句(如 if 语句)自动执行相应的 Boolean 转换非常重要

 

③Number

1)进制

 

最基本的数值字面量格式是十进制整数 

除了十进制 整数还可以通过八进制和十六进制的字面值表示 八进制第一位必须是0,然后是八进制数字序列(0-7) 如果字面值中的数值超出范围 那么第一位0将被忽略后面的数值将被当做十进制数值解析

var octalNum1 = 070;      // 八进制的 56 
var octalNum2 = 079;      // 无效的八进制数值——解析为 79 
var octalNum3 = 08;      // 无效的八进制数值——解析为 8 
 
八进制字面量在严格模式下是无效的,会导致支持的 JavaScript引擎抛出

十六进制字面值前面两位必须是0x 后跟任何十六进制数字(0-9 A-F) 字母a-f可以大写 也可以小写

var hexNum1 = 0xA;      // 十六进制的 10 
var hexNum2 = 0x1f;      // 十六进制的 31 
在进行算术计算时,所有以八进制和十六进制表示的数值终都将被转换成十进制数值。 

2)NaN

NaN 即非数值是一个特殊的数值 这个数值用于表示一个未来要返回数值的操作数未返回数值的情况(这样就不会抛出错误)

NaN本身有哦两个非同寻常的特点  
1.任何涉及NaN的操作都会返回NaN 
2.NaN与任何值都不相等 包括NAN本身 

alert(NaN == NaN);   //false 

isNaN() 这个函数接受一个参数,该参数可以 是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试 将这个值转换为数值。某些不是数值的值会直接转换为数值

alert(isNaN(NaN));         //true 
alert(isNaN(10));          //false(10是一个数值) 
alert(isNaN("10"));        //false(可以被转换成数值 10) 
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值 1)

 

3)数值转换

有 3个函数可以把非数值转换为数值:Number()、parseInt()和 parseFloat()   第一个函数,即转型函数 Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这 3个 函数对于同样的输入会有返回不同的结果。 

Number() 函数的转换规则

  • 如果是 Boolean 值,true 和 false 将分别被转换为 1和 0。
  • 如果是数字值,只是简单的传入和返回。 
  • 如果是 null 值,返回 0。
  • 如果是字符串,遵循下列规则
  1. 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1" 会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了); 
  2.  如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽 略前导零); 
  3.  如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整 数值
  4.  如果字符串是空的(不包含任何字符),则将其转换为 0
  5. 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN
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()会继续解析第二个字符,直到解析完所有后续字符或者遇到了 一个非数字字符

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(八进制数) 
var num6 = parseInt("70");         // 70(十进制数) 
var num7 = parseInt("0xf");         // 15(十六进制数) 

可以传入第二个参数作为基数 以哪种进制进行解析
var num1 = parseInt("AF", 16);  //175
var num2 = parseInt("AF");   //NaN 

 

parseFloat() 也是从第一个字符(位置 0)开始解析每个字符。而且 也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第 一个小数点是有效的,而第二个小数点就是无效的了,

除了第一个小数点有效之外,parseFloat()与 parseInt()的第二个区别在于它始终都会忽略前导的零。parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格 式的字符串则始终会被转换成 0

由于 parseFloat()只解析十进制值,因此它没有用第二个参数指定基 数的用法。后还要注意一点:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后 都是零),parseFloat()会返回整数

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 

所以一个忽略前面空格一个忽略前面零

 

④String                                                                                      

转换为字符串 要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的 toString()方法。这个方法唯一要做的就是返回相应值的字符串表现

数值、布尔值、对象和字符串值(没错,每个字符串也都有一个 toString()方法,该方法返回字 符串的一个副本)都有 toString()方法。但 null 和 undefined 值没有这个方法。  

var age = 11; 
var ageAsString = age.toString();         // 字符串"11" 
var found = true; 
var foundAsString = found.toString();     // 字符串"true" 

可以传递一个参数:输出数值的基数。默认情况下,toString()方法以十进制格式返回数值的字符串表 示。而通过传递基数,toString()可以输出以二进制、八进制、十六进制,乃至其他任意有效进制格 式表示的字符串值
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"。 
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" 

比toString() 可以多转换null和undefined

 

⑤Object 

对象其实就是一组数据和功能的集合。对象可以通过执行 new 操作符后跟要创建的对象类型的名称来创建。而创建 Object 类型的实例并为其添加属性和(或)方法,就可以创建自定 义对象

var o = new Object(); 

Object 类型所具有的任何属性和方法也同样存在于更具体的对象中。 

Object 的每个实例都具有下列属性和方法。

  •  constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是 Object()。
  •  hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例 如:o.hasOwnProperty("name"))。
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句 (本章后面将会讨论)来枚举。与 hasOwnProperty()方法一样,作为参数的属性名必须以字符 串形式指定。
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同

 

posted @ 2020-02-01 18:10  自_定义  阅读(231)  评论(0编辑  收藏  举报