初識JS之數據類型

JavaScript

JavaScript引入方式

Script標籤內寫代碼

<script>
  // 在這裏寫你的JS代碼
</script>

引入額外的JS文件

<script src="myscript.js"></script>

JavaScript語言規範

註釋(註釋是代碼之母)

// 這是單行註釋

/*
這是
多行註釋
*/

結束符

JavaScript中的語句要以分號(;)爲結束符。python

JavaScript語言基礎

變量聲明

  1. JavaScript的變量名可使用_,數字,字母,$組成,不能以數字開頭。
  2. 聲明變量使用 var 變量名; 的格式來進行聲明
var name = "Alex";
var age = 18;

注意:正則表達式

變量名是區分大小寫的。推薦使用駝峯式命名規則。保留字不能用作變量名。數組

ES6新增了let命令,用於聲明變量。其用法相似於var,可是所聲明的變量只在let命令所在的代碼塊內有效。例如:for循環的計數器就很適合使用let命令。dom

for (let i=0;i<arr.length;i++){...}

總結,var做用於全局,let做用於局部函數

JavaScript數據類型

JavaScript擁有動態類型this

var x;  // 此時x是undefined
var x = 1;  // 此時x是數字
var x = "Alex"  // 此時x是字符串 

數值(Number)

JavaScript不區分整型和浮點型,就只有一種數字類型。spa

var a = 12.34;
var b = 20;
var c = 123e5;  // 12300000
var d = 123e-5;  // 0.00123

還有一種NaN,表示不是一個數字(Not a Number)。3d

經常使用方法:指針

parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN屬性是表明非數字值的特殊值。該屬性用於指示某個值不是數字。
parseFloat("123.456")  // 返回123.456

字符串(String)

var a = "Hello"
var b = "world;
var c = a + b; 
console.log(c);  // 獲得Helloworld

經常使用方法:code

模板字符串

//模板字符串(template string)是加強版的字符串,用反引號(`)標識。它能夠當作普通字符串使用,也能夠用來定義多行字符串,或者在字符串中嵌入變量
// 普通字符串
`這是普通字符串!`
// 多行文本
`這是多行的
文本`
// 字符串中嵌入變量
var name = "jason", time = "today";
`Hello ${name}, how are you ${time}?`

ps:若是模板字符串中須要使用反引號,則在其前面要用反斜槓轉義。

 

 布爾值(Boolean)

區別於python,true和false都是小寫

var a = true;
var b = false;

""(空字符串)、0、null、undefined、NaN都是false。

null和undefined

  • null表示值是空,通常在須要指定或清空一個變量時纔會使用,如 name=null;
  • undefined表示當聲明一個變量但未初始化時,該變量的默認值是undefined。還有就是函數無明確的返回值時,返回的也是undefined。

null表示變量的值是空(null能夠手動清空一個變量的值,使得該變量變爲object類型,值爲null),undefined則表示只聲明瞭變量,但尚未賦值

總結:拿廁所裏的衛生紙來講,null就是用完了,而undefined則是放都沒放

對象(Object)

JavaScript 中的全部事物都是對象:字符串、數值、數組、函數...此外,JavaScript 容許自定義對象。

JavaScript 提供多個內建對象,好比 String、Date、Array 等等。

對象只是帶有屬性和方法的特殊數據類型。

數組

數組對象的做用是:使用單獨的變量名來存儲一系列的值。相似於Python中的列表。

var a = [123, "ABC"];
console.log(a[1]);  // 輸出"ABC"

經常使用方法:

ps:

forEach()

語法:

forEach(function(currentValue, index, arr), thisValue)

語法解析:

function(currentValue, index, arr)

 

splice()

語法:

splice(index,howmany,item1,.....,itemX)

 

 map()

同Python中的map使用

數組函數的調用方法

數組對象.函數名(function(參1,參2,參3){代碼體})

運算符

算數運算符

+ - * / % ++ --
var x=10;
var res1=x++;
var res2=++x;
res1;
res2;
這裏因爲的x++和++x在出現賦值運算式,x++會先賦值再進行自增1運算,而++x會先進行自增運算再賦值!

比較運算符

> >= < <= != == === !==
1 == 「1」  // true  弱等於
1 === "1"  // false 強等於
//上面這張狀況出現的緣由在於JS是一門弱類型語言(會自動轉換數據類型),因此當你用兩個等號進行比較時,JS內部會自動先將
//數值類型的1轉換成字符串類型的1再進行比較,因此咱們之後寫JS涉及到比較時儘可能用三等號來強制限制類型,防止判斷錯誤

邏輯運算符

&& || !

賦值運算符

= += -= *= /=

流程控制

if-else

switch

是一種對應關係

var day = 1;
switch (day) {
case 0:
console.log("Sunday");
break;
case 1:
console.log("Monday");
break;
default:
console.log("...")
}

switch中的case子句一般都會加break語句,不然程序會繼續執行後續case中的語句。

for

for (var i=0;i<10;i++) {
  console.log(i);
}

while

var i = 0;
while (i < 10) {
  console.log(i);
  i++;
}

三元運算

var a = 1;
var b = 2;
var c = a > b ? a : b
//這裏的三元運算順序是先寫判斷條件a>b再寫條件成立返回的值是冒號前面的a,條件不成立返回的值是冒號後面的b;三元運算能夠嵌套使用;
var a=10,b=20;
var x=a>b ?a:(b=="20")?a:b;

x
10

函數

函數定義

JavaScript中的函數和Python中的很是相似,只是定義方式有點區別。

// 普通函數定義
function f1() {
  console.log("Hello world!");
}

// 帶參數的函數
function f2(a, b) {
  console.log(arguments);  // 內置的arguments對象,arguments能夠拿到你傳的全部參數
  console.log(arguments.length);
  console.log(a, b);
}

// 帶返回值的函數
function sum(a, b){
  return a + b;
}
sum(1, 2);  // 調用函數

// 匿名函數方式
var sum = function(a, b){
  return a + b;
}
sum(1, 2);

// 當即執行函數 書寫當即執行的函數,首先先寫兩個括號()()這樣防止書寫混亂
(function(a, b){
  return a + b;
})(1, 2);

ES6中容許使用「箭頭」(=>)定義函數。

var f = v => v;
// 等同於
var f = function(v){
  return v;
}

var f = () => 5;
// 等同於
var f = function(){return 5};

var sum = (num1, num2) => num1 + num2;
// 等同於
var sum = function(num1, num2){
  return num1 + num2;  //這裏的return只能返回一個值,若是想返回多個值須要本身手動給他們包一個數組或對象中
}

函數中的arguments參數

function add(a,b){
  console.log(a+b);
  console.log(arguments.length);
 console.log(arguments[0]);//arguments至關於將出傳入的參數所有包含,這裏取得就是第一個元素1
}
add(1,2)

ps:函數只能返回一個值,若是要返回多個值,只能將其放在數組或對象中返回。

函數的全局變量和局部變量

局部變量

在JavaScript函數內部聲明的變量(使用 var)是局部變量,因此只能在函數內部訪問它(該變量的做用域是函數內部)。只要函數運行完畢,本地變量就會被刪除。

全局變量:

在函數外聲明的變量是全局變量,網頁上的全部腳本和函數都能訪問它。

變量生存週期:

JavaScript變量的生命期從它們被聲明的時間開始。

局部變量會在函數運行之後被刪除。

全局變量會在頁面關閉後被刪除。

做用域

首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。與python做用域關係查找如出一轍!

幾個例子:

var city = "BeiJing";
function f() {
  var city = "ShangHai";
  function inner(){
    var city = "ShenZhen";
    console.log(city);
  }
  inner();
}

f();  //輸出結果是?
//ShenZhen


var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印結果是?
//BeiJing


var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();
// ShangHai

內置對象和方法

JavaScript中的全部事物都是對象:字符串、數字、數組、日期,等等。在JavaScript中,對象是擁有屬性和方法的數據。

注意var s1 = "abc"和var s2 = new String("abc")的區別:typeof s1 --> string而 typeof s2 --> Object

自定義對象

JavaScript的對象(Object)本質上是鍵值對的集合(Hash結構),可是隻能用字符串做爲鍵。

var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);

遍歷對象中的內容:

var a = {"name": "Alex", "age": 18};
for (var i in a){
  console.log(i, a[i]);
}

建立對象:

var person=new Object();  // 建立一個person對象
person.name="Alex";  // person對象的name屬性
person.age=18;  // person對象的age屬性

Date對象

建立Date對象

//方法1:不指定參數
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:參數爲日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:參數爲毫秒數
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:參數爲年月日小時分鐘秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒並不直接顯示

Date對象的方法:

var d = new Date(); 
//getDate()                 獲取日
//getDay ()                 獲取星期
//getMonth ()               獲取月(0-11)
//getFullYear ()            獲取完全年份
//getYear ()                獲取年
//getHours ()               獲取小時
//getMinutes ()             獲取分鐘
//getSeconds ()             獲取秒
//getMilliseconds ()        獲取毫秒
//getTime ()                返回累計毫秒數(從1970/1/1午夜)

JSON對象

JSON.stringify()的做用是將 JavaScript 值轉換爲 JSON 字符串

JSON.parse()能夠將JSON字符串轉爲一個對象。

var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串轉換成對象
var obj = JSON.parse(str1); 
// 對象轉換成JSON字符串
var str = JSON.stringify(obj1);

RegExp對象

// 定義正則表達式兩種方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;

// 正則校驗數據
reg1.test('jason666')
reg2.test('jason666')

/*第一個注意事項,正則表達式中不能有空格*/ 

// 全局匹配
var s1 = 'egondsb dsb dsb';
s1.match(/s/)
s1.match(/s/g)
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
reg2.test('egondsb');
reg2.test('egondsb');
reg2.lastIndex;
/*第二個注意事項,全局匹配時有一個lastIndex屬性*/

// 校驗時不傳參數
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test();
reg2.test(undefined);

var reg3 = /undefined/;
reg3.test();

RegExp

 

 緣由:第一次匹配時指針移到最後,第二次匹配時指針由於已經移到最後了匹配不到東西,返回False,而後指針回到起始位置,第三次就又能夠從頭開始匹配,後續和前面三次的同樣。

Math對象

abs(x)      返回數的絕對值。
exp(x)      返回 e 的指數。
floor(x)    對數進行下舍入。
log(x)      返回數的天然對數(底爲e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次冪。
random()    返回 0 ~ 1 之間的隨機數。
round(x)    把數四捨五入爲最接近的整數。
sin(x)      返回數的正弦。
sqrt(x)     返回數的平方根。
tan(x)      返回角的正切
相關文章
相關標籤/搜索