C语言JQuery官方学习资料(译):类型

 

  • 类型

   
JavaScript提供了两个放置数据类型。除了这个,这份文档还将介绍一些虚拟类型,例如采取器、伪类、事件等。

 

  • String

   
在JavaScript中字符串是一个不可变的靶子,它包含无、一个或五个字符。它的品种称之为“string”。

typeof"some string"; // "string"
    • 引号

   
一个字符串能够选拔单引号或双引号来定义,你可以在双引号内或周围嵌套使用单引号,假若要在双引号内尔y用双引号(或者单引号内尔(Nell)y用单引号),必须嵌套使用反斜杠举办转义。

"You make 'me' sad."
'That\'s "cranking" good fun!'
"<a href=\"home\">Home</a>"
    • 嵌入方法

   
在JavaScript中有局部放权方法可以操作字符串。日常结果总是回到一个新的字符串,或回到一个array。

"hello".charAt( 0 ) // "h"
"hello".toUpperCase() // "HELLO"
"Hello".toLowerCase() // "hello"
"hello".replace( /e|o/g, "x" ) // "hxllx"
"1,2,3".split( "," ) // [ "1", "2", "3" ]
    • Length属性

   
所有的字符串都有一个length属性(长度属性)。

"Hello".length // 5
"".length // 0
    • 默认布尔值

    一个空字符串默认为false。

!"" // true
!!"" // false
!"hello" // false
!"true" // false
!new Boolean( false ) // false

 

  • htmlString

   
当一个字符串在JQuery文档中表示一个或两个DOM元素时,平时被创造和插入到文档中时,那多少个字符串将被作为htmlString。当被作为一个JQuery()方法参数传递的时候,这多少个字符串将会被看成是HTML。

   
当一个字符串作为参数传递给一个操作方法时,例如.append(),它总是被当作为HTML,因为JQuery对那些字符串(CSS选拔器)的别样共同解释不适用于其上下文。

    $.parseHTML()可以显式的分析一个html字符串。

// 追加<b>hello</b>:
$( "<b>hello</b>" ).appendTo( "body" );
// 追加<b>hello</b>:
$( "<b>hello</b>bye" ).appendTo( "body" );
// 语法错误, unrecognized expression: bye<b>hello</b>
$( "bye<b>hello</b>" ).appendTo( "body" );
// 追加bye<b>hello</b>:
$( $.parseHTML( "bye<b>hello</b>" ) ).appendTo( "body" );
// 追加<b>hello</b>wait<b>bye</b>:
$( "<b>hello</b>wait<b>bye</b>" ).appendTo( "body" );

 

  • Number

    在JavaScript中的Number是双精度64位IEEE754格式化的值。仅仅看做字符串的时候,它们是不行变更的。对于Number类型的数据颇具的演算符都是基于C语言的点子展开演算的。

typeof 12 // "number"
typeof 3.543 // "number"
    • 默认布尔值

   
假设一个数字是0,那么它默认为false。

!0 // true
!!0 // false
!1 // false
!-1 // false

   
由于是双精度运行,上面这么些结果不算是一个错误

0.1 + 0.2// 0.30000000000000004
    • Math

   
JavaScript提供了数学对象中的数字通用效能。

Math.PI // 3.141592653589793
Math.cos( Math.PI ) // -1
    • 数字分析

    parseInt和parseFloat可以用来解析字符串为数字,如若不指定两者是做隐式转换的。

parseInt( "123" ) = 123 // (隐式十进制)
parseInt( "010" ) = 8 // (隐式八进制)
parseInt( "0xCAFE" ) = 51966 // (隐式十六进制)
parseInt( "010", 10 ) = 10 // (显示十进制)
parseInt( "11", 2 ) = 3 // (显示二进制)
parseFloat( "10.10" ) = 10.1
    • Numbers与Strings

   
当数字加一个字符串时,结果一贯是一个字符串,而运算符情势是如出一辙的,这是索要专注的,尽管您想先举行数字运算再附加到一个字符串,那么数字运算需要用括号包裹起来。

"" + 1 + 2; // "12"
"" + ( 1 + 2 ); // "3"
"" + 0.0000001; // "1e-7"
parseInt( 0.0000001 ); // 1 (!)

   
或者您要动用JavaScript提供的String类,可以分析一个数字为字符串。

String( 1 ) + String( 2 ); // "12"
String( 1 + 2 ); // "3"
    • NaN和Infinity

   
解析一个不是数字的东西时结果是NaN,isNaN方法可以扶助你判定结果是否是NaN。

parseInt( "hello", 10 ) // NaN
isNaN( parseInt("hello", 10) ) // true

 
  除零的结果是Infinity。

1 / 0// Infinity

 
  NaN和Infinity都是Number类型的。

typeof NaN // "number"
typeof Infinity // "number"

   
需要注意的是NaN的一种出乎意料的可比,它与它和谐相比较是例外的。

NaN == NaN// false (!)

    不过Infinity的相比是见仁见智的。

Infinity == Infinity// true
    • Integer

   
整数是一个普通的数字类型,但每当明确指明的时候,表示数字是一个非浮点数。

    • Float

       
    浮点数也是一个通常的数字类型,但每当明确指明的时候,就意味着数字是一个浮点数。

 

  • Boolean

   
在JavaScript中Boolean代表的是true或者false。

if ( true ) console.log( "always!" );
if ( false ) console.log( "never!" );

 

  • Object

       
    在JavaScript中一切都是对象。最简易的制造对象的章程是目标文字。

var x = {};
var y = {
name: "Pete",
age: 15
};

    对象的类型是Object。

typeof {} // "object"
    • 点符号

       
    你可以采纳点符号读取和写入对象的性能。

y.name // "Pete"
y.age // 15
x.name = y.name + " Pan" // "Pete Pan"
x.age = y.age + 1 // 16
    • 数组符号

    C语言,   
    或许你读写对象的特性是因此数组符号,它同意你动态的采取对象的性能。

var operations = {
increase: "++",
decrease: "--"
};
var operation = "increase";
operations[ operation ] // "++"
operations[ "multiply" ] = "*"; // "*"
    • 迭代

       
    通过for-in-loop就可以省略的落实目的的迭代。

var obj = {
name: "Pete",
age: 15
};
for( key in obj ) {
alert( "key is " + [ key ] + ", value is " + obj[ key ] );
}

   
需要留意的是for-in-loop可能会在延伸使用到Object.prototype的时候出现问题,例如Object.prototype被人变更了。

   
JQuery提供了通用的each方法去遍历对象的特性和要素数组。

jQuery.each( obj, function( key, value ) {
console.log( "key", key, "value", value );
});

   
缺点是回调被调用在迭代值的内外文中,因而你错过了土生土长对象的上下文。

    • 默认布尔值

       
    一个对象,无论它是不是有性能,默认值永远不会为false。

!{} // false
!!{} // true
    • 原型

       
    所有的对象都有原型(prototype)属性,每当把它看作属性的时候,假若在对象上找不到那多少个特性它仍旧会在对象的原型上开展检讨,JQuery广泛的使用原型将艺术添加到JQuery实例上。JQuery使用jQuery.fn作为jQuery.prototype的别名,你可以利用其中的人身自由一个

var form = $("#myform");
console.log( form.clearForm ); // undefined
// jQuery.fn == jQuery.prototype
jQuery.fn.clearForm = function() {
return this.find( ":input" ).each(function() {
this.value = "";
}).end();
};
// 所有的JQuery对象实例都可以运行,因为新的方法已经被添加到原型上了
console.log( form.clearForm );
form.clearForm();

 

  • Array

       
    在JavaScript中数组是可变通的,并且有一对放权方法可以采用。

var x = [];
var y = [ 1, 2, 3 ];
typeof []; // "object"
typeof [ 1, 2, 3 ]; // "object"
x[ 0 ] = 1;
y[ 2 ] // 3
    • 迭代

       
    在数组的迭代中length属性是卓殊实用的。

for ( var i = 0; i < a.length; i++ ) {
// a[i]
}

   
当性能是最重要的时候,只读取四遍length属性可以扶持运行速度的提高。

for ( var i = 0, j = a.length; i < j; i++ ) {
// a[i]
}

   
此外还有一种状态是在迭代语句中定义变量来存储数组当前迭代的元素,在循环体中不再使用数组元素而是以此变量。

for ( var i = 0, item; item = a[i]; i++ ) {
// 使用item变量
}

   
JQuery提供了each方法可以迭代数组的各种元素,这个艺术对于迭代目的的性质也是适用的。

var x = [ 1, 2, 3 ];
jQuery.each( x, function( index, value ) {
console.log( "index", index, "value", value );
});

    length属性能够用来作为序号将元素插手到数组的结尾。

var x = [];
x.push( 1 );
x[ x.length ] = 2;
x // [ 1, 2 ]

    数组还有不少的放到方法。

var x = [ 0, 3, 1, 2 ];
x.reverse() // [ 2, 1, 3, 0 ]
x.join(" – ") // "2 - 1 - 3 - 0"
x.pop() // [ 2, 1, 3 ]
x.unshift( -1 ) // [ -1, 2, 1, 3 ]
x.shift() // [ 2, 1, 3 ]
x.sort() // [ 1, 2, 3 ]
x.splice( 1, 2 ) // [ 2, 3 ]
    • 默认布尔值

       
    一个数组,无论它有没有元素,也永远不会默认为false。

![] // false
!![] // true
    • Array<Type> 符号

       
    在JQuery的API中,通常可以窥见有Array<Type>符号。这样可以指定数组元素的预期类型,类似于.NET中的泛型。

dragPrevention    Array<String>

 

  • PlainObject

 
  PlainObject是一个JavaScript对象,包含了0个或多少个键值对。

var a = [];
var d = document;
var o = {};
typeof a; // object
typeof d; // object
typeof o; // object
jQuery.isPlainObject( a ); // false
jQuery.isPlainObject( d ); // false
jQuery.isPlainObject( o ); // true

 

  • Function

   
一个函数(方法)在JavaScript中可以是命名的要么是匿名的。任何一个函数都可以分配给一个变量,或传递给一个函数,不过经过传递成员函数这样的艺术得以使她们被另一个对象的上下文调用。函数的体系是“function”。

function named() {}
var handler = function() {}

   
JQuery代码中的匿名函数是大气凸现的。

$( document ).ready(function() {});
$( "a" ).click(function() {});
$.ajax({
url: "someurl.php",
success: function() {}
});
    • 参数

   
在函数中有一种新鲜的变量,那就是参数,它是一种伪数组情势的要素。

function log( x ) {
console.log( typeof x, arguments.length );
}
log(); // "undefined", 0
log( 1 ); // "number", 1
log( "1", "2", "3" ); // "string", 3

   
参数对象都有一个callee属性,它指向的是实例之中的函数。

var awesome = function() { return arguments.callee; }
awesome() == awesome // true
    • 上下文

   
在JavaScript中,this总是指向当前上下文,默认情状下this指向的是window对象,在一个函数内this的上下文就会暴发转移,这种改变取决于函数是哪些被调用的。

$( document ).ready(function() {
// this指向window.document
});
$( "a" ).click(function() {
// this指向DOM中的a标签元素
});

   
你可以指定一个函数的上下文来使用函数的停放方法call或者apply。两者的分别在于如何传递参数,call将兼具的参数作为一个arguments传递给函数,而apply接收一个arguments数组作为参数。

function scope() {
console.log( this, arguments.length );
}
scope() // window, 0
scope.call( "foobar", [ 1, 2 ] ); // "foobar", 1
scope.apply( "foobar", [ 1, 2 ] ); // "foobar", 2
    • 作用域

   
在JavaScript中,所有函数内部定义的变量都仅仅在该函数的效益域内是立竿见影的。

    在大局范围内定义的变量与函数内部定义的变量名称相同时,两者是不会有争执的。

var x = 0;
(function() {
var x = 1;
console.log( x ); // 1
})();
console.log( x ); // 0
    • 闭包

    闭包是对功能域范围的扩大,闭包让函数可以在外部访问该函数被制造的功用域内的变量。这种形式允许你创立对象后通过艺术来操作对象内部的变量,这一个变量是外部不可见的,这也正是面向对象编程的基础。

function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log( counter );
}
}
}
var c = create();
c.increment();
c.print(); // 1
    • 代理情势

   
在JavaScript中有一种代理形式,为其余对象提供一种代理以控制对这些目的的拜会,可以实现焦点的面向方面编程(AOP)。

  • 回调

   
回调就是在一个函数中传递一些函数作为其参数。JQuery的风波系统就是行使函数回调来落实的。

$( "body" ).click(function( event ) {
console.log( "clicked: " + event.target );
});

   
回调的重回值是可选的,例如提防表单提交,我们可以经过事件来开展处理。

$( "#myform" ).submit(function() {
return false;
});

 

  • Selector

   
在JQuery中一个selector是被用来挑选DOM文档中的元素,那文档一般是在浏览器中,除此之外通过AJAX接收的XML文档也是适用的。

   
如若selector被指定为参数类型,那么它将承受一切JQuery构造函数接受的,例如:字符串、元素和要素列表等。

 

  • Event

       
    JQuery事件系统是遵照W3C标准条件事件目的的,事件目的是被担保传递给事件处理器的。

    DOM中的标准事件是:blur, focus,
 load, resize, scroll, unload, beforeunload, click, dblclick, mousedown,
mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change,
select, submit, keydown, keypress, 和
keyup。DOM事件的名目是为局部要素预定义的,JQuery事件模型可以通过元素上的部分名称指向一个事变。

 

  • Element

       
    在DOM中的一个因素得以有总体性、文本和子节点。它提供了点子可以遍历父节点和子节点,并赢得它们的习性。JQuery提供了帮手元素与DOM交互的艺术。

   
每当使用JQuery中的each方法,函数回调的上下文将被装置为一个DOM元素,事件处理器也是相近的。

$( ":text" ).blur(function() {
if( !this.value ) {
alert( "Please enter some text!" );
}
});

 

  • jQuery

       
    JQuery对象涵盖一个DOM元素的聚集。JQuery平常拔取CSS样式中的采用器来配合文档中的元素,设置JQuery对象中的元素平常被誉为设置“匹配元素”或者“已选元素”。

   
JQuery对象类似于数组,然则急需留意的是它不是真的的数组对象,即使它有length属性,不过其他部分数组内置方法是无法接纳的。

   
很多JQuery方法重临的也是JQuery对象,所以在这么的情况下得以选用链式调用的章程来调用函数。

$( "p" ).css( "color", "red" ).find( ".special" ).css( "color", "green" );

   
每当你采纳JQuery的链式调用函数时,假诺你想回到到当下元素在此以前的丰裕元素,那么你可以使用.end()方法。

   
JQuery对象可以是空的,不带有DOM中的元素,你可以经过$()创立一个空JQuery对象。如若接纳器没有拔取另外因素或者链式方法中过滤了具有的元素,那么JQuery对象为空而不是error,并且在空的JQuery对象上调用方法是无效的。

 

  • XMLHttpRequest

     
      一些jQuery的AJAX函数重返的是本地的XMLHttpRequest(XHR)对象,而XMLHttpRequest正是AJAX的要旨目的,其首要功用是与服务端举办多少交互。

 

  • XML Document

    XML文档对象是透过浏览器的XML
DOM解析器创制的,XML文档与HTML文档有着不同的语义,但多数的遍历与JQuery方法对于双方是相同选拔和运行的。

 

  • 类型检查

   
jQuery提供了有些主导的实用方法来确定一个特定值的品类。

var myValue = [ 1, 2, 3 ];
// 使用JavaScript的typeof来测试类型
typeof myValue === "string"; // false
typeof myValue === "number"; // false
typeof myValue === "undefined"; // false
typeof myValue === "boolean"; // false
// 使用全等于运算符判断是否为null
myValue === null; // false
// 使用Jquery的方法检查类型
jQuery.isFunction( myValue ); // false
jQuery.isPlainObject( myValue ); // false
jQuery.isArray( myValue ); // true