CARVIEW |
Select Language
HTTP/2 200
x-guploader-uploadid: AAwnv3K8IWDUwkZ4DbxL5BNYiyj0d8kb4aW2pRRemTwHv85KIHBN71W4QZ57xKunqUsyx8E8gSLqE0w
x-goog-generation: 1760058447974335
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 142846
x-goog-meta-goog-reserved-file-mtime: 1760056825
x-goog-hash: crc32c=acQv/g==, md5=Ov6bDro+jOqTC0BGddgHkw==
x-goog-storage-class: STANDARD
accept-ranges: none
expires: Mon, 13 Oct 2025 13:33:57 GMT
cache-control: public, max-age=3600
last-modified: Fri, 10 Oct 2025 01:07:28 GMT
etag: W/"3afe9b0eba3e8cea930b404675d80793"
content-type: text/html
age: 0
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
alt-svc: clear
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
strict-transport-security: max-age=63072000
content-security-policy: default-src 'self'; script-src 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; script-src-elem 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; style-src 'report-sample' 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; connect-src 'self' developer.allizom.org bcd.developer.allizom.org bcd.developer.mozilla.org updates.developer.allizom.org updates.developer.mozilla.org https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://incoming.telemetry.mozilla.org https://observatory-api.mdn.allizom.net https://observatory-api.mdn.mozilla.net https://api.github.com/search/issues stats.g.doubleclick.net https://api.stripe.com; font-src 'self'; frame-src 'self' interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net mdn.github.io live-samples.mdn.mozilla.net live-samples.mdn.allizom.net *.mdnplay.dev *.mdnyalp.dev *.play.test.mdn.allizom.net https://v2.scrimba.com https://scrimba.com jsfiddle.net www.youtube-nocookie.com codepen.io survey.alchemer.com https://js.stripe.com; img-src 'self' data: *.githubusercontent.com *.googleusercontent.com *.gravatar.com mozillausercontent.com firefoxusercontent.com profile.stage.mozaws.net profile.accounts.firefox.com developer.mozilla.org mdn.dev interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net wikipedia.org upload.wikimedia.org https://mdn.github.io/shared-assets/ https://mdn.dev/ https://*.google-analytics.com https://*.googletagmanager.com www.gstatic.com; manifest-src 'self'; media-src 'self' archive.org videos.cdn.mozilla.net https://mdn.github.io/shared-assets/; child-src 'self'; worker-src 'self';
x-frame-options: DENY
origin-trial: AxVILwizhbMjxFeHOn1P3R8niO1RJY/smaK4B4d1rLzc1gTaxtXMSaTi+FoigYgCw40uFRDwFcEAeqDR+vVLOW4AAABfeyJvcmlnaW4iOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZyIsImZlYXR1cmUiOiJQcml2YXRlQXR0cmlidXRpb25WMiIsImV4cGlyeSI6MTc0MjA3OTYwMH0=
x-cloud-trace-context: 4ada506eb254a0319b896fdab25c3211
date: Mon, 13 Oct 2025 12:33:57 GMT
server: Google Frontend
via: 1.1 google
vary: Accept-Encoding
content-encoding: gzip
x-cache: miss
Select - WebAssembly | MDN
Toggle sidebar
Select
The select
instruction, selects one of its first two operands based on whether its third operand is zero or not. It shares some similarities with the ternary operator in other languages (e.g., false ? 10 : 20
), but doesn't short-circuit. The instruction may be followed by an immediate value type: select (result T)
. select (result T)
uses a different binary opcode, and allows types besides those introduced by the WebAssembly MVP (i32
, i64
, f32
, f64
), for example, it allows selection between two externref
values.
Try it
(module
(func (export "select_simple") (result i32)
;; load two values onto the stack
i32.const 10
i32.const 20
;; change to `1` (true) to get the first value (`10`)
i32.const 0
select
)
(func (export "select_externref") (param $value externref) (param $condition i32) (result externref)
;; this is "select t", the explicitly typed variant
ref.null extern
local.get $value
local.get $condition
select (result externref)
)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url)).then((result) => {
const { select_simple, select_externref } = result.instance.exports;
console.log(select_simple());
// Expected output: 20
// If the second parameter is zero, returns the first parameter (which may be an arbitrary JS value)
const map = new Map();
console.log(select_externref(map, 0));
// Expected output: [object Map]
console.log(select_externref(map, -1));
// Expected output: null
});
Syntax
wat
;; push two values onto the stack
i32.const 10
i32.const 20
;; change to `1` (true) to get the first value (`10`)
i32.const 0
select
f32.const nan f32.const -54.1 ;; change to `1` (true) to get the first value (`nan`) i32.const 0 select (result f32)
Instruction | Binary opcode |
---|---|
select |
0x1b |
select t |
0x1c |