JavaScript学习(三)基础知识 类型转换 交互 函数表达式

类型转换

ToString

显式地调用 String(value) 来达到这一目的

let value = true;
alert(typeof value); // boolean

value = String(value); // 现在,值是一个字符串形式的 "true"
alert(typeof value); // string

ToNumber

在算术函数和表达式中,会自动进行 number 类型转换。

比如,当使用 / 用于非 number 类型:

alert( "6" / "2" ); // 3, string 类型的值被转换成 number

也可以使用 Number(value) 显式地将这个值转换为 number 类型。

let str = "123";
alert(typeof str); // string

let num = Number(str); // 变成 number 类型 123

alert(typeof num); // number

当从 string 类型源读取值时,比如一个文本表单,但是我们期待数字输入,就经常进行显式转换。

如果字符串不是一个有效的数字,转换的结果会是 NaN,例如:

let age = Number("an arbitrary string instead of a number");

alert(age); // NaN,转换失败

number 类型转换规则:

JavaScript学习(三)基础知识 类型转换 交互 函数表达式_第1张图片

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

ToBoolean

显式调用 Boolean(value) 会触发 boolean 类型转换。

转换规则如下:

  • 假值,比如 0、空的字符串、nullundefinedNaN 变成 false
  • 其他值变成 true
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false

 


 

交互:alert、prompt、confirm

alert

显示信息。

prompt

显示信息要求用户输入文本。点击确定返回文本,点击取消或按下 Esc 键返回 null

confirm

显示信息等待用户点击确定或取消。点击确定返回 true,点击取消或 Esc 键返回 false


函数

函数声明

使用函数声明创建函数。

function showMessage() {
  alert( 'Hello everyone!' );
}

function 关键字首先出现,然后是函数名,然后是括号(在上述示例中为空)之间的参数列表,最后是花括号之间的代码(即“函数体”)。

JavaScript学习(三)基础知识 类型转换 交互 函数表达式_第2张图片

 

局部变量

在函数中声明的变量只在该函数内部可见。

function showMessage() {
  let message = "Hello, I'm JavaScript!"; // 局部变量

  alert( message );
}

showMessage(); // Hello, I'm JavaScript!

alert( message ); // <-- 错误!变量是函数的局部变量

外部变量

函数也可以访问外部变量

let userName = 'John';

function showMessage() {
  let message = 'Hello, ' + userName;
  alert(message);
}

showMessage(); // Hello, John

函数命名

一种普遍的做法是用动词前缀来开始一个函数,这个前缀模糊地描述了这个动作。

  • "get…" —— 返回值,
  • "calc…" —— 计算
  • "create…" —— 创建,

"check…" —— 检查并返回 boolean 值

showMessage(..)     // 显示信息
getAge(..)          // 返回 age (gets it somehow)
calcSum(..)         // 计算求和并返回结果
createForm(..)      // 创建表格 (通常会返回它)
checkPermission(..) // 检查权限并返回 true/false

总结

  • 作为参数传递给函数,值被复制到其局部变量
  • 函数可以访问外部变量。但它只能从内到外起作用。函数外部的代码看不到它的局部变量。
  • 函数可以返回值。如果没有,则其结果是 undefined

函数表达式和箭头函数

回调函数

我们写一个包含三个参数的函数 ask(question, yes, no)

question

question 文本

yes

当回答 “Yes” 时候运行的脚本

no

当回答 “No” 时候运行的脚本

函数需要提出 question(问题),依赖用户的回答, 调用 yes()no()

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

function showOk() {
  alert( "You agreed." );
}

function showCancel() {
  alert( "You canceled the execution." );
}

// usage: functions showOk, showCancel are passed as arguments to ask
ask("Do you agree?", showOk, showCancel);

 

ask 参数调用回调函数或只是回调

我们的想法是,我们传递一个函数,并希望稍后在必要时回调它。在我们的例子中,showOk 对应回答 “yes” 的回调,showCancel 对应回答“否”。

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

ask(
  "Do you agree?",
  function() { alert("You agreed."); },
  function() { alert("You canceled the execution."); }
);

函数表达式 vs 函数声明

函数声明 函数在主代码流中单独声明。

// Function Declaration
function sum(a, b) {
  return a + b;
}

函数表达式 一个函数,在一个表达式中或另一个语法结构中创建。这里,该函数由赋值表达式 = 右侧创建:

// Function Expression
let sum = function(a, b) {
  return a + b;
};

函数表达式在执行到达时创建并可用一旦执行到右侧分配 let sum = function…,就会创建并可以使用(复制,调用等)。函数声明可用于整个脚本/代码块。当一个函数声明在一个代码块内运行时,它在该块内的任何地方都是可见的。

 

总结

  • 函数是值。他们可以在代码的任何地方分配,复制或声明。
  • 如果函数在主代码流中声明为单独的语句,那就称为函数声明。
  • 如果该函数是作为表达式的一部分创建的,则称其为函数表达式。
  • 函数声明在代码块执行之前处理。它们在代码块中随处调用。
  • 函数表达式在执行流程到时创建。

你可能感兴趣的:(前端学习)